我有一个看起来像这样的表:
ID_a | ID_b | VAL
1 | 1 | 'a'
1 | 2 | 'b'
1 | 3 | 'a'
2 | 1 | 'a'
2 | 2 | 'c'
3 | 1 | 'c'
4 | 1 | 'c'
5 | 1 | 'b'
6 | 1 | 'e'
我需要执行一个查询,该查询将选择具有多于一行的所有ID_a,但是这些行在VAL列中具有不同的值,因此示例中的结果将为ID_a = 1(多于一行, VAL在('a','b')中)并且ID_a = 2(不止一行,VAL在('a','c')中)。可以用SQL编写这样的查询吗?
答案 0 :(得分:3)
您可以尝试通过ID_a使用HAVING count *)和count(distintc VAL)> 1组
select ID_a
from my_table
group by ID_a
having count(*)>1
and count(distinct VAL) > 1
答案 1 :(得分:1)
使用string_agg()
select ID_a,string_agg(distinct val order by val)
from my_table
group by ID_a
having count(*)>1
and count(distinct VAL) > 1