Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL分组依据,其中组内的值相同_Mysql - Fatal编程技术网

Mysql SQL分组依据,其中组内的值相同

Mysql SQL分组依据,其中组内的值相同,mysql,Mysql,因此,我有一个表,其中个人person_id有多行,最多4行,列value_列的值可以=0或1 我想编写一段代码,为每个person\u id返回一行,其中value\u列的值仅为0或1,即使每个person\u id可能有3或4行 这可能是一行简单的代码,但对于SQL经验较少的人来说,这几乎是不可能的 编辑:下面是一个线条的快速示例: person_id value_column A 0 A 1 A 0 B 0 B

因此,我有一个表,其中个人person_id有多行,最多4行,列value_列的值可以=0或1

我想编写一段代码,为每个person\u id返回一行,其中value\u列的值仅为0或1,即使每个person\u id可能有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

你可以试试这样的

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

内部查询将只返回那些只存在一个值列的person\u id,这与countdistinct value\u列所做的相同。请发布一个行示例以及您期望查询输出的示例。因此,您的目的是排除person\u id='a',因为'a'既有0也有1?是,为了只返回一行person_id='B'和person_id='C',请为OP和未来的读者添加一个解释,说明HAVING COUNTDISTINCT在这里是如何工作的……是的,肯定是,它被断电中断了。反正现在加了。非常感谢您指出这一点。非常接近,但与其返回多个重复的person\u id值,我如何才能只返回每个person\u id的一行?也就是说,现在我们知道返回的person_id都只有一个列_value的不同值,那么,我们如何才能只返回每个列的一个唯一实例呢?只需在外部选择中使用一个不同的关键字。
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)