簡體   English   中英

MySQL GROUP BY來自不同表的多個列

[英]MySQL GROUP BY multiple columns from different tables

我有以下表格布局:

Table Data
+----------+-------------------------+
| Field    | Type                    |
+----------+-------------------------+
| type     | enum('type_b','type_a') |
| type_id  | int(11) unsigned        |
| data     | bigint(20) unsigned     |
+----------+-------------------------+

Table A and B:

+--------------+------------------+
| Field        | Type             |
+--------------+------------------+
| id           | int(11) unsigned |
| customer_id  | int(11) unsigned |
| ...                             |
+--------------+------------------+

在表格數據中,存在來自某種類型(a或b)的一些測量數據。 現在我想要永遠的客戶兩種類型的數據a和b的總和。

所以,我想:選擇總和,通過a.customer_id,b.customer_id連接a或b並分組。

導致以下查詢:

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 ta.customer_id, tb.customer_id;

這不能讓我得到正確的結果......

我嘗試了幾種方法,左連接,加入客戶表和group by customer.id等。是否有人知道我做錯了什么?

感謝名單!

您的查詢

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;

假設d中只有一條記錄,它是type_a。 ta和tb各有兩條記錄。 d中的記錄與d.type_id=ta.id中的ta中的一個記錄匹配。 因此,(dx ta)的組合允許任何tb記錄保留在最終結果中。 你會得到一個意想不到的笛卡兒產品。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM