如何选择按列分组的值,如果另一列有多个值
问题描述:
我想从表中获得column1中那些值在column2中的值。如何选择按列分组的值,如果另一列有多个值
例如,我想得到A,因为它有“1,2,3”。 (预期的选择输出:A)
---
A|1
A|2
A|3
A|4
B|1
B|3
---
这是我已经试过
SELECT * FROM sample_table WHERE Col2 in (1,2,3) GROUP BY col1
我完全理解它不会工作,因为我只是把条件是第2列必须有(A,1),(A,2),(A,3),(B,1),(B,2) - >将它们组合在一起(A)和(B)
我真的不知道如何强迫它有所有 3值
这里是fiddle尝试它
注意
请随意编辑的文章,以便使其更容易理解,我已经尽了全力,但我知道它不是很好解释,特别是标题
非常感谢您
答
可以使用HAVING()
条款:
SELECT col1
WHERE Col2 in (1,2,3)
GROUP BY col1
HAVING COUNT(col2) = 3
这将只显示有3个值的结果,因为你只1,2,3
过滤,如果有3个,它的3
注意:如果COL2的值不是不同的,E.G.有可能为这一数据显示:
A | 1
A | 1
A | 2
然后加入DISTINCT
计数的括号内。
答
你可以尝试用HAVING
和GROUP_CONCAT
玩:
SELECT COL1
FROM sample
GROUP BY COL1
HAVING GROUP_CONCAT(DISTINCT COL2 ORDER BY COL2 ASC) LIKE '%1,2,3%'
DISTINCT是在这种情况下(希望)冗余。否则,我们错过了一个主键:-( – Strawberry
我必须同意,我把它删除:) @Strawberry – sagi
实际上,根据OP的要求,distinct是强制性的,否则所有col1值都有(1, 2,3)将显示为col2 – hchaznedaroglu