查询具有不同发生的记录

时间:2013-02-22 00:02:56

标签: sql count group-by having

我有这个场景

|---COL A ------------------COL B----|
|----001 ----------------------X-----|
|----001 ----------------------X-----|
|----002 ----------------------Y-----|
|----002 ----------------------Y-----|
|----003 ----------------------X-----|
|----003 ----------------------Y-----|
|----004 ----------------------X-----|
|----004 ----------------------Z-----|

我想在colB中获取具有不同值的记录。因此,我期望得到列b的值不同的id的结果。

003
004

意味着003具有x和Y,并且004具有x和Z

我试过了:

select colA,count(*) from table group by colA,colB having count(*) >2;

看起来不对,因为它将具有相同A和B的那些分组

所以我删除了分组依据的col,但随后它获得了所有具有相同A的人,并忽略了B是否相等。我不知道它的正确语法。

2 个答案:

答案 0 :(得分:0)

SELECT colA 
FROM (
    SELECT colA, COUNT(DISTINCT colB) countB
    FROM tableGroup 
    GROUP BY colA
)
WHERE countB > 1

答案 1 :(得分:0)

试试这个:

select colA
from t
group by colA
having count(distinct colB) >= 2

关键是count(distinct)

稍微更有效的形式是:

having min(colB) <> max(colB)

但是,这并不能概括为超过2个值。