Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找与指定的一组相关项关联的项数_Mysql - Fatal编程技术网

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的交易