Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL GROUP BY wiele kolumn z różnych tabel

Twoje zapytanie

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;

Powiedzmy, że w d jest tylko jeden rekord i jest to type_a. Istnieją dwa rekordy w ta i tb każdy. Rekord w d pasuje do jednego z rekordów w ta w d.type_id=ta.id . Dlatego ta kombinacja (d x ta) pozwala na pozostawienie DOWOLNEGO rekordu tb w wyniku końcowym. Otrzymujesz niezamierzony produkt kartezjański.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql nie działa, ale subsys jest zablokowany

  2. Jak usunąć całą bazę danych MySQL

  3. Jak zresetować słowa stop w MYSQL?

  4. Ucieczka MySQL GROUP_CONCAT

  5. Ostrzeżenie PHP MYSQL:mysql_query() oczekuje, że parametr 1 będzie ciągiem