SQL在一列中获取具有相同ID但值不同的所有行

时间:2019-05-13 05:43:53

标签: sql postgresql

我有一个看起来像这样的表:

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编写这样的查询吗?

2 个答案:

答案 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