我有以下表格布局:
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 |
| ... |
+--------------+------------------+
在表Data中有一些来自某种类型(a或b)的测量数据。
现在我想要所有客户的数据 a 和 b 类型的总和。
所以,我想:选择总和,加入 a 或 b,然后按 a.customer_id、b.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 ta.customer_id, tb.customer_id;
这没有给我正确的结果......
我尝试了几种方法,左连接、加入客户表和按 customer.id 分组等。有人知道我做错了什么吗?
Thanx!
您的查询
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 中的记录与 ta 中的记录之一匹配d.type_id=ta.id
。因此,(d x 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)