查找前6名的SQL代码

查找前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

编写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_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