sql >> Databasteknik >  >> RDS >> Mysql

MySQL GROUP BY flera kolumner från olika tabeller

Din fråga

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;

Låt oss säga att det bara finns en post i d, och det är typ_a. Det finns två poster i ta och tb vardera. Posten i d matchar en av posterna i ta på d.type_id=ta.id . Därför tillåter den kombinationen av (d x ta) ALLA tb-poster att finnas kvar i slutresultatet. Du får en oavsiktlig kartesisk produkt.

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. Frågehastighet baserat på kolumnernas ordning

  2. Konvertera kolumnen Datetime från UTC till lokal tid i select-satsen

  3. Hur current_time fungerar i PostgreSQL

  4. Infoga om det inte finns Oracle