SQL查询:如何将列组的计数与另一列区分开来

时间:2012-11-06 17:40:06

标签: sql optimization count

在我的表格中,我需要知道每个ID是否只有一个ID_name。我怎么写这样的查询?

我试过了:

select ID, count(distinct ID_name) as count_name 
from table 
group by ID 
having count_name > 1

但它需要永远运行。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

select  ID
from    YourTable
group by
        ID
having  count(distinct ID_name) > 1

select  *
from    YourTable yt1
where   exists
        (
        select  *
        from    YourTable yt2
        where   yt1.ID = yt2.ID
                and yt1.ID_Name <> yt2.ID_Name
        )

现在,大多数ID列都定义为primary key并且是唯一的。因此,在常规数据库中,您希望两个查询都返回一个空集。

答案 1 :(得分:0)

从中选择tt.ID,max(tt.myRank) ( 选择ip.ID,ip.ID_name, ROW_Number()over(ip.ID分区,ip.ID分区ip.ID_nameorder)为myRank 来自YourTable ip )tt 按tt.ID分组

这为每个ID提供了ID_Name

的总数

如果您只想要那些具有多个名称关联的ID,请添加一个where子句 e.g。

从中选择tt.ID,max(tt.myRank) ( 选择ip.ID,ip.ID_name, ROW_NUMBER()结束(ip.ID分区,ip.ID分区ip.ID_name)作为myRank 来自YourTable ip )tt 其中tt.myRank&gt; 1 按tt.ID分组