SQL:搜索正确的记录组

问题描述 投票:0回答:3

假设我们有一个包含2列的Groupings表:Group_ID和Item_ID。两者都是整数。举一个简单的例子,我们可以想象Item_ID只能是3个值中的一个:{1,2,3}。然后,Group_ID表示该数据的不同排列组。例如:

Group_ID Item_ID
1 1
2 2
3 3
4 1
4 2
5 1
5 3
6 2
6 3
7 1
7 2
7 3

如果我输入Item_Ids的集合,它会返回与该集合相关的Group_ID,我可以写什么SQL?

因此,例如在上面输入(2,3)=> 6

编辑:我想在更复杂的表上使用解决方案查询,其中Item_ID有16个不同的值

sql
3个回答
2
投票

使用条件聚合

select group_id
from table t1
where Item_ID in(2,3)
and exists( select 1 from table t2 where t1.group_id=t2.group_id
                having count(distinct t2.Item_ID)=2 )                 

group by group_id
having count(distinct item_id)=2

1
投票

另一个Sql来做这个

SELECT Group_id
FROM YourTable
GROUP BY Group_id
HAVING COUNT(Item_ID) = 2
   AND COUNT(CASE WHEN Item_ID = 2 THEN Item_ID END) > 0
   AND COUNT(CASE WHEN Item_ID = 3 THEN Item_ID END) > 0

1
投票

假设你没有重复,我只会这样做:

select group_id
from t
group by group_id
having sum(case when Item_ID in (2, 3) then 1 else 0 end) = count(*) and
       count(*) = 2;

这似乎是最简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.