我正在尝试编写数据库中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名,但显示所有行。
我不知道这是不是一个愚蠢的问题,但我正在失去这一切的酷!
非常感谢您提前的时间。
答案 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)