SQL group by group在组内的值相同

时间:2014-10-16 14:51:37

标签: mysql

所以,我有一个表,其中个人(person_id)有多行(最多4行),列的值(value_column)可以= 0或1

我想编写一段代码,为每个person_id返回一行,其中value_column的值仅为0或仅为1(即使它们每行可能有3行或4行)

它可能是一行简单的代码,但对于那些SQL经验较少的人来说,这几乎是不可能的!

编辑:这是一个快速的线条样本:

person_id  value_column
A          0
A          1
A          0
B          0
B          0
B          0
B          0
C          1
C          1
C          1

我希望代码行返回以下内容:

person_id value_column
B          0
C          1

2 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情

select distinct * from table1
where person_id in
( select person_id
  from table1
  group by person_id
  having count(distinct value_column) <= 1
)

内部查询,只会返回仅存在一个person_id的{​​{1}},而value_column完成同样的事情,然后外部查询只选择那些person_id的一切。

答案 1 :(得分:0)

select * from myTable where person_id not in 
(select a.person_id from myTable a, myTable b
  where a.person_id = b.person_id
    and a.value_column <> b.value_column)

获取具有不同价值观的人,然后获取不在第一次查询中的人。

或更快更好:

select person_id, min(value_column)
 from myTable
 group by person_id
 having min(value_column)=max(value_column)