我有一张表Transactions
,其中包含以下数据:
+------+---------+
| id | item |
+------+---------+
| 1 | A |
| 1 | B |
| 2 | A |
| 2 | D |
| 3 | C |
| 3 | D |
| 4 | E |
| 4 | C |
| 5 | A |
| 5 | B |
| 5 | C |
+------+---------+
如何找到包含指定项目集的交易数量?
例如,包含项目A和B的事务数量为2,因为只有事务1和5包含这两个项目。
答案 0 :(得分:2)
我不确定你的意见是什么,但要解决你的问题,这将是
<强> Sql Fiddle Demo 强>
这将统计包含A
和B
SELECT count(*)
FROM (
SELECT id, count(*)
FROM Table1
GROUP BY `id`
HAVING COUNT( CASE WHEN `item` = 'A' THEN 1 END) > 0
AND COUNT( CASE WHEN `item` = 'B' THEN 1 END) > 0
) T
<强>输出强>
| count(*) |
|----------|
| 2 |
注意强>
子查询中的count(*)
是可选的,只是将其添加到调试中以获得该子查询的可视化反馈。
答案 1 :(得分:0)
可能是这样的,虽然未经过测试:
SELECT A.id, count(A.item) AS cntA, count(B.item) AS cntB
FROM table AS A
LEFT JOIN table AS B
ON (A.item = B.item) AND (A.id <> B.id)
GROUP BY A.id
HAVING cntA = cntB
自我将表加入具有相同项目的不同ID,并比较项目数。如果计数相同,则两个ID具有相同的项目。
答案 2 :(得分:0)
有点短,可能更快一点:
SELECT id
FROM Transactions
WHERE item IN ('A', 'B')
GROUP BY id
HAVING COUNT(DISTINCT item) = 2