sql >> Database >  >> RDS >> Mysql

MySQL GROUP BY meerdere kolommen uit verschillende tabellen

Uw vraag

SELECT sum(d.data) as total
FROM data d, ta, tb
WHERE
(d.type LIKE "type_a" AND d.type_id = ta.id) 
OR 
(d.type LIKE "type_b" AND d.type_id = tb.id) 
GROUP BY a.customer_id, b.customer_id;

Laten we zeggen dat er maar één record in d is, en dat is type_a. Er zijn twee records in ta en tb elk. Het record in d komt overeen met een van de records in ta op d.type_id=ta.id . Daarom laat die combinatie van (d x ta) ELKE tb-record toe om in het eindresultaat te blijven. U krijgt een onbedoeld cartesiaans product.

SELECT x.customer_id, SUM(data) total
FROM
(
    SELECT ta.customer_id, d.data
    FROM data d JOIN ta
       ON (d.type LIKE "type_a" AND d.type_id = ta.id) 
    UNION ALL
    SELECT tb.customer_id, d.data
    FROM data d JOIN tb
       ON (d.type LIKE "type_b" AND d.type_id = tb.id) 
) X
GROUP BY x.customer_id;



  1. Installeer PostgreSQL op Ubuntu 20.04

  2. MySQL Group By en Som totale waarde van andere kolom

  3. VOOR XML PATH(''):Speciale tekens ontsnappen

  4. Geen server-side voorbereide instructies met MySQL Connector/J