MySQL comment combiner deux lignes en une


caboose0013:

Bonjour stackoverflow,

J'utilise mysql 8 avec le tableau suivant:

create table usage_info
(
    id bigint auto_increment
        primary key,
    amount double not null,
    timestamp datetime null,
    type varchar null
);

données d'exemple:

id  amount  timestamp             type
--------------------------------------
1   0.123   2020-06-30 12:40:54   A
2   0.098   2020-06-30 15:47:51   B
3   0.456   2020-06-30 16:40:54   A
4   0.101   2020-06-30 17:47:51   B
5   0.123   2020-07-01 12:40:54   A
6   0.098   2020-07-01 15:47:51   B
7   0.456   2020-07-01 16:40:54   A
8   0.101   2020-07-01 17:47:51   B

Je peux obtenir des totaux pour chaque type pour chaque jour avec 2 méthodes différentes

Méthode 1.

select total, type, date from (
select sum(u.amount) as total, u.type, DATE_FORMAT(u.timestamp, "%a-%c-%d-%y") as date
from usage_info u
group by DATE_FORMAT(u.timestamp, "%a-%c-%d-%y"), u.type) as temp;

résultats:

total    type    date
---------------------
0.579    A       Tue-6-30-20
0.199    B       Tue-6-30-20
0.579    A       Wed-7-01-20
0.199    B       Wed-8-01-20

Méthode 2.

select case
           when type = 'A' then total
           end as A,
       case
           when type = 'B' then total
           end as B,
       date
from (
         select sum(u.amount) as total, u.type, DATE_FORMAT(u.timestamp, "%a-%c-%d-%y") as date
         from usage_info u
         group by DATE_FORMAT(u.timestamp, "%a-%c-%d-%y"), u.type
     ) as results;

donne:

A        B       date
----------------------------
0.579    null    Tue-6-30-20
null     0.199   Tue-6-30-20
0.579    null    Wed-7-01-20
null     0.199   Wed-7-01-20

Mais ce à quoi je voudrais que les résultats ressemblent est:

A        B       date
----------------------------
0.579    0.199   Tue-6-30-20
0.579    0.199   Wed-7-01-20

Merci pour votre temps!

Gordon Linoff:

Utilisez simplement l'agrégation conditionnelle:

select sum(case when type = 'A' then u.amount end) as total_a,
       sum(case when type = 'B' then u.amount end) as total_b,
       DATE_FORMAT(u.timestamp, "%a-%c-%d-%y") as date
from usage_info u
group by DATE_FORMAT(u.timestamp, '%a-%c-%d-%y');

Articles connexes


Comment combiner deux lignes en une seule liste?

visons J'ai un fichier (text.txt) qui ressemble à ceci: I went to the pool yesterday. The water there was freezing and I caught a cold Je lis ce fichier et enlève la nouvelle ligne supplémentaire entre les deux. Cependant, ce faisant, ces deux lignes sont pl

Comment combiner deux lignes en une dans PostgreSQL?

Sagit Khaliullin Je sélectionne les données de 2 tables dans postgres de cette manière: SELECT matches.id id, first_team_id T1, second_team_id T2, name FROM matches JOIN teams ON matches.first_team_id = teams.id UNION SELECT matches.id id, first_team_id T1

MySQL: combiner deux lignes en une seule ligne?

oneCoderToRuleThemAll Comment combiner deux lignes de la même table en une seule ligne pour éviter les champs nuls? Par exemple, si j'ai les deux lignes suivantes: id col1 col2 col3 1 12 null 13 2 56 74 89 Je veux obtenir le résultat: 1 12 74 13

Talend - Combiner deux lignes en une

jc carmelo Exemple d'entrée Voici un exemple de mon entrée. Comme vous pouvez le voir, la colonne d'adresse a 2 valeurs que je voudrais séparer puis combiner en une seule valeur. Production attendue Voici ce que devrait être la sortie, valeurs combinées dans u

combiner deux lignes SQL en une seule

dinith jayabodhi Dans le tableau de données lorsque PRICE_TYPE = MSRP, le montant doit être ajouté à la colonne msrp et lorsque PRICE_TYPE = SELP le montant doit être ajouté à la colonne selp, Comment puis-je écrire une requête pour effectuer la tâche ci-dessu

Comment puis-je combiner deux lignes d'un dataframe en une seule?

Xandian97 Fondamentalement, j'ai une simple trame de données à deux colonnes, l'une avec les degrés d'un cercle à intervalles de 10 °, et l'autre avec les fréquences de ces degrés dans une autre trame de données. Dans la colonne des degrés, il y a une ligne po