找到列值变化的位置

时间:2013-02-12 10:28:39

标签: 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

结果应该选择john和steve

2 个答案:

答案 0 :(得分:7)

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

select name
from yourtable
group by name
having count(distinct flag) > 1

请参阅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)

请参阅SQL Fiddle with Demo

这将返回名称和标志:

|  NAME | FLAG |
----------------
|  john |    1 |
|  john |    0 |
|  john |    1 |
| steve |    1 |
| steve |    0 |

答案 1 :(得分:4)

尝试以下方法:

SELECT DISTINCT t1.Name
FROM Table t1 
INNER JOIN Table t2 ON t1.Name = t2.Name
WHERE t1.flag <> t2.flag