sql >> Databáze >  >> RDS >> Mysql

MySQL GROUP BY více sloupců z různých tabulek

Váš dotaz

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;

Řekněme, že v d je pouze jeden záznam, a to typ_a. Každý má dva záznamy v ta a tb. Záznam v d odpovídá jednomu ze záznamů v ta na d.type_id=ta.id . Proto tato kombinace (d x ta) umožňuje, aby v konečném výsledku zůstal JAKÝKOLI záznam tb. Získáte nezamýšlený kartézský součin.

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. Nelze vložit explicitní hodnotu pro sloupec identity v tabulce 'tabulka', když je IDENTITY_INSERT nastaveno na OFF

  2. WebApp (Tomcat-jdbc) Sdružené připojení DB vyvolá výjimku opuštění

  3. Dotaz MySQL s limitem a velkým offsetem trvá věčnost

  4. Jak PostgreSQL vynucuje omezení UNIQUE / jaký typ indexu používá?