Mysql 查找与指定的一组相关项关联的项数
我有一个表,Mysql 查找与指定的一组相关项关联的项数,mysql,Mysql,我有一个表,事务,其中包含以下数据: +------+---------+ | id | item | +------+---------+ | 1 | A | | 1 | B | | 2 | A | | 2 | D | | 3 | C | | 3 | D | | 4 | E | | 4 | C | | 5 | A | | 5
事务
,其中包含以下数据:
+------+---------+
| 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的事务数为两个,因为只有事务1和5同时包含这两个项目。可能类似于此,但未经测试:
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
选择A.id,将(A.item)计数为cntA,将(B.item)计数为cntB
从表中作为
左联接表为B
在(A.item=B.item)和(A.id B.id)上
按A.id分组
具有cntA=cntB的
在具有相同项的不同ID上自联接表,并比较项的计数。如果计数相同,则两个ID具有相同的项。我不确定您的输入是什么,但为了解决您的问题,这就可以了 这将统计同时包含
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 |
注意
子查询中的
计数(*)
是可选的,只是为了调试而添加它,以便对该子查询进行可视化反馈。短一点,可能快一点:
SELECT id
FROM Transactions
WHERE item IN ('A', 'B')
GROUP BY id
HAVING COUNT(DISTINCT item) = 2
这是双人练习。但是事务_id 5有三个元素,所以我想OP可能需要一个广泛的解决方案。但是它连接所有的项并对它们进行计数(尽管它错误地将其作为内部连接),并比较计数。不管有多少,这只是比较计数。你的问题的输入是什么?搜索有多少交易具有与
id=1
相同的项目,或查找有多少交易具有项目A和B
?因为如果您搜索id=5
,您将找到3个项目感谢帮助,输入的是项目A和B,因此任何包含展位项目A和B的交易