【问题标题】:Querying on a record with different occurrence查询具有不同出现的记录
【发布时间】:2013-02-22 00:02:56
【问题描述】:

我有这种情况

|---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 的人分组

所以我删除了 group by 上的 col b ,但是它得到了所有具有相同 A 的人,而忽略了 B 是否相等。我不知道它的正确语法。

【问题讨论】:

    标签: sql count group-by having


    【解决方案1】:
    SELECT colA 
    FROM (
        SELECT colA, COUNT(DISTINCT colB) countB
        FROM tableGroup 
        GROUP BY colA
    )
    WHERE countB > 1
    

    【讨论】:

    • 嗯,我正在避免子选择,因为我在生产中使用数十万条记录运行它,它可能会减慢系统速度吗?
    • 在这种情况下,请尝试 Gordon 的解决方案。但是我会测试所有性能选项;根据 DMBS 所做的优化,我们认为更快的可能是也可能不是。
    【解决方案2】:

    试试这个:

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

    密钥是count(distinct)

    一种更有效的形式是:

    having min(colB) <> max(colB)
    

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

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多