Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL GROUP BY mehrere Spalten aus verschiedenen Tabellen

Ihre Anfrage

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;

Nehmen wir an, es gibt nur einen Datensatz in d, und es ist Typ_a. Es gibt jeweils zwei Datensätze in ta und tb. Der Datensatz in d stimmt mit einem der Datensätze in ta auf d.type_id=ta.id überein . Daher ermöglicht diese Kombination von (d x ta), dass JEDER tb-Datensatz im Endergebnis verbleibt. Sie erhalten ein unbeabsichtigtes kartesisches 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;