查找前6名的SQL代码
编写SQL代码以查找每个公司的前6个客户国 如何处理此查询?到目前为止,我在想:-查找前6名的SQL代码,sql,Sql,编写SQL代码以查找每个公司的前6个客户国 如何处理此查询?到目前为止,我在想:- select top 6 Client_Country, count(*) Total from table group by Client_Country order by total desc 要获得每个国家的排名,您需要使用窗口功能。否则,你将获得前6名 我不确定您使用的是什么RDBMS,但在SQL Server中,您可以执行以下操作: ;WITH top_cte AS ( SELECT *, ROW
select top 6 Client_Country, count(*) Total
from table group by Client_Country
order by total desc
要获得每个国家的排名,您需要使用窗口功能。否则,你将获得前6名 我不确定您使用的是什么RDBMS,但在SQL Server中,您可以执行以下操作:
;WITH top_cte AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY Company ORDER BY Revenue DESC) AS [Rank]
FROM table
)
SELECT *
FROM top_cte
WHERE [Rank] <= 6
编辑:编辑为使用行编号而不是秩。排名的一个问题是,如果你有3家公司并列第五,你会得到8个结果,而不是6个。试试这个
SELECT * FROM
(
SELECT *,Row_Number() Over(Partition By Company Order By (Select Null)) RN FROM TAble1
) AS T
Where RN < 7
这取决于您的RDBMS,请使用:
顶部:SQL server、MS Access
限制:MySQL
ROWNUM:Oracle我建议您使用rank函数来实现此功能,然后CTE将其限制在前6位,类似于:
SELECT * FROM (
SELECT company,client_company, RANK() OVER (PARTITION BY company ORDER BY REVENUE DESC) as top6
FROM table
) k
WHERE k.top6<7
试试这个
;with cte as
(
select *,rn=dense_rank()over(partition by company order by Revenue desc) from table
)
select top 6 with ties * from cte
使用ties,您可以在ties的情况下进行选择选择前6名公司、客户所在国家/地区、来自表中的收入,其中收入=选择来自收入i的最大收入,其中i.Client\u Country=表中客户所在国家/地区按收入描述排序
我说的对吗?顶部是指最高的收入吗?你使用的是什么关系数据库管理系统SQL Server/MySQL/等等?我认为可以公平地说OP使用的是SQL Server,但是,你真的应该在你的问题中加上标签。根据我对这个问题的理解,我认为你不想按客户国进行划分。这将提供总体排名前6位,不是每家公司的头号人物。这个查询需要一个窗口功能。如果它在一个块的开头,你就不需要了——我一直把它忽略掉。如果它不是在一个块的开头,那么用分号结束前面的语句比用分号开始这个语句更合适。但是因为我知道这在这里很常见,我将添加它。您的查询没有引用rn字段,这意味着它将只返回6条记录,而不是每个公司返回6条记录。在进行更改时,您还需要更改densite_rank,因为在您将rn添加到WHERE子句之后,它可能会为每个公司返回远远超过6条记录。
;with cte as
(
select *,rn=dense_rank()over(partition by company order by Revenue desc) from table
)
select top 6 with ties * from cte