选择前100个组

时间:2015-05-04 11:08:31

标签: sql sql-server tsql

我在表格中有数千个组,例如:

1.. 
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..

我怎样才能做出每次都给我前三组的选择。

我希望从行中选择前三名,但必须返回前三组而不是前三行。

5 个答案:

答案 0 :(得分:3)

你可以试试这个:

;with cte as (

select distinct groupId from mytable order by groupid 
)
select * from mytable where TheGroupId in (select top 3 groupdid from cte)

答案 1 :(得分:1)

您可以使用DENSE_RANK为每个组分配一个号码。同一组的所有成员将具有相同的编号。然后在外部查询中,选择前3个组:

SELECT *
FROM (SELECT *, DENSE_RANK() OVER (ORDER BY id) AS rnk
      FROM mytable ) t
WHERE t.rnk <= 3

上述查询假设id是用于将记录组合​​在一起的列。

SQL Fiddle Demo

答案 2 :(得分:1)

使用排名功能Row_Number()

SELECT *
FROM   (SELECT *,
               Row_number()
                 OVER(
                   partition BY GroupId
                   ORDER BY GroupId) AS [rn]
        FROM   YourTable) t
WHERE  rn <= 3 

检查此MSDN doc以获取所有排名功能的详细信息。

答案 3 :(得分:0)

有一个sql TOP语句执行此操作

SELECT TOP number|percent column_name(s) FROM table_name;

可以在此处找到有关它的用途以及如何在替代sql语句中使用它的说明,例如mysql和ms访问:http://www.w3schools.com/sql/sql_top.asp

我的错误我误解了你的问题,这将返回顶行不是群组,你能解释一下你想要做的更详细吗?

答案 4 :(得分:0)

SELECT *
FROM 
    (SELECT *
          ,ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY [Group] ASC)rn
     FROM TableName
    )A
WHERE rn <= 3