【问题标题】:Only return rows where the value appears more than n times只返回值出现超过 n 次的行
【发布时间】:2013-11-12 21:04:04
【问题描述】:

假设我有一张桌子

  id            value
------        ---------
  A              123
  A              422
  B              441
  B              986
  B              674
  C              648

我需要一个查询,它只返回那些具有 3 个或更多相关值的 id。因此,在这种情况下,它只会返回 B。 谢谢。

【问题讨论】:

    标签: sql sql-server count


    【解决方案1】:

    Group By 子句与Having 一起使用:

    SELECT id 
    FROM dbo.TableName
    GROUP BY ID
    HAVING COUNT(*) >= 3
    

    Demo

    【讨论】:

    • ...简单...谢谢
    【解决方案2】:

    如果您想包含该值,您可以使用窗口函数来查找具有三行或更多行的值,例如:

    DECLARE @x TABLE(id CHAR(1), value INT);
    
    INSERT @x SELECT 'A',       123;
    INSERT @x SELECT 'A',       422;
    INSERT @x SELECT 'B',       441;
    INSERT @x SELECT 'B',       986;
    INSERT @x SELECT 'B',       674;
    INSERT @x SELECT 'C',       648;
    
    ;WITH x AS 
    (
      SELECT id, value, rn = ROW_NUMBER() OVER (PARTITION BY id ORDER BY id)
      FROM @x
    )
    SELECT id FROM x WHERE rn = 3;
    

    您可以更改ORDER BY 以帮助更好地确定包含哪个value

    【讨论】:

      【解决方案3】:

      select id from table group by id having (count(id) >=3)

      【讨论】:

        【解决方案4】:
        SELECT ID
        FROM TABLE
        GROUP BY ID
        HAVING COUNT(*) >= 3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 1970-01-01
          • 2022-01-05
          相关资源
          最近更新 更多