找到列值变化的位置

San*_*lai 4 mysql sql

如何仅选择标志值因同名而变化的名称?

name    flag
ben     0
harry   1
harry   1
harry   1
john    1
john    0
john    1
krishna 1
krishna 1
luke    0
steve   1
steve   0
Run Code Online (Sandbox Code Playgroud)

结果应该选择约翰和史蒂夫

Tar*_*ryn 7

您可以使用以下内容对数据进行分组name并计算不同的标志值.如果count大于1则它们具有不同的标志:

select name
from yourtable
group by name
having count(distinct flag) > 1
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

如果要对此进行扩展并在表中包含其他列,则可以使用:

select t1.name, t1.flag
from yourtable t1
where exists (select name
              from yourtable t2
              where t1.name = t2.name
              group by name
              having count(distinct flag) > 1)
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

这将返回名称和标志:

|  NAME | FLAG |
----------------
|  john |    1 |
|  john |    0 |
|  john |    1 |
| steve |    1 |
| steve |    0 |
Run Code Online (Sandbox Code Playgroud)