SQL Server:按事件发生的TOP 10查询,不使用group by

时间:2013-11-26 11:51:54

标签: sql sql-server

我正在尝试编写数据库中Top 10次出现的查询。但是我不想在模式组中看到它。

我有一个包含40000行和20列的数据库,我想编写一个查询,返回x行,其中前10行出现在一个特定列中。

当我使用它时:

Select top 10 colum.name
from table.name

我得到的是数据库中的前10行。

当我使用它时:

select top 10 colum.name
From table.name
group by colum.name
order by colum.name DESC

我的前十次出现但按我的列分组,我想要的是看到相同的前10名,但显示所有行。

我不知道这是不是一个愚蠢的问题,但我正在失去这一切的酷!

非常感谢您提前的时间。

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

;WITH Top10Distinct AS
(
    SELECT DISTINCT TOP 10 YourColumn
    FROM dbo.YourTable
    ORDER BY YourColumn DESC
)
SELECT *
FROM dbo.YourTable tbl
INNER JOIN Top10Distinct cte ON tbl.YourColumn = cte.YourColumn

CTE首先获取TOP 10 DISTINCT的{​​{1}}值,然后将这些前10个值与实际" base"相加。表YourColumn,从而从基表中检索完整的所有行,其中包含十大不同列值之一。

答案 1 :(得分:0)

you could use row_number()/rank()/dense_rank () depending on the requirement

前:

with cte as
(
select name,ROW_NUMBER() over (id order by id) as rn
);

select * from cte where rn <=10

这会输出10行

答案 2 :(得分:0)

您可以使用脏的子查询:

Select column.name
from table.name
Where column.name IN (Select top 10 column.name
                      from table.name
                      group by column.name
                      order by count(*) desc)