【问题标题】:Microsoft SQL server to select Top N groupMicrosoft SQL Server 选择 Top N 组
【发布时间】:2016-12-13 17:28:51
【问题描述】:

关于如何从每个组中选择 n 行有很多答案。 但我正在寻找的是从前 N 组中选择每一行,例如我有以下数据:

 id   group
  1     a
  2     a
  3     b
  4     c
  5     c
  6     d
  7     d
  .......

如果我想选择Top 3 Group,我的预期结果如下:

   1    a
   2    a
   3    b
   4    c
   5    c

如何使用 Microsoft SQL Server 2008 实现这一目标?

【问题讨论】:

标签: sql sql-server sql-server-2008 select


【解决方案1】:

一种选择是使用选择前 N 个组的子查询:

SELECT t1.id, t1.group
FROM yourTable t1
INNER JOIN
(
    SELECT DISTINCT TOP(N) group
    FROM yourTable
    ORDER BY group
) t2
    ON t1.group = t2.group

【讨论】:

  • 不应将 ORDER BY 替换为 GROUP BY
  • @TheShooter 我正在使用DISTINCT 查找第一个N 组。另一种方法是使用GROUP BY 而不使用DISTINCT
  • 同意。不应该错过的:(
  • 感谢@TimBiegeleisen 的指导 :)
【解决方案2】:

你可以按组rank你的行,然后只取前三名:

SELECT [id], [group]
FROM   (SELECT [id], [group], RANK() OVER (ORDER BY [group] ASC) rk
        FROM   mytable) t
WHERE  rk <= 3

【讨论】:

    【解决方案3】:

    @Tim:我刚刚修改了你的查询。

    SELECT t1.id, t1.group
    FROM yourTable t1
    INNER JOIN
    (
        SELECT TOP N group
        FROM yourTable
        GROUP BY group
        --ORDER BY group USE IT IF YOU WANT
    ) t2
        ON t1.group = t2.group
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2019-11-27
      • 2014-08-15
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多