如何从sql表中选择多个最大值
我试图从一个表中选出表现最好的人,按公司分组,但似乎无法正确分组 我曾尝试使用子查询,但这超出了我的知识范围 我试图进行一个查询,选择绿色的行。换言之,我想包括名字、公司以及他们支付的费用,但只包括每家公司的顶级员工 这是原始数据如何从sql表中选择多个最大值,sql,sql-server,Sql,Sql Server,我试图从一个表中选出表现最好的人,按公司分组,但似乎无法正确分组 我曾尝试使用子查询,但这超出了我的知识范围 我试图进行一个查询,选择绿色的行。换言之,我想包括名字、公司以及他们支付的费用,但只包括每家公司的顶级员工 这是原始数据 创建表测试(person varchar(50)、company varchar(50)、paid numeric); 插入 试验 价值观 ('bob','a',200), ('jane','a',100), (‘马克’、‘a’、350), ('susan','b'
创建表测试(person varchar(50)、company varchar(50)、paid numeric);
插入
试验
价值观
('bob','a',200),
('jane','a',100),
(‘马克’、‘a’、350),
('susan','b',650),
('thabo','b',100),
('thembi','b',210),
('lucas','b',110),
('oscar','c',10),
('janet','c',20),
('nancy','c',30)
这是您的问题
select a.person, a.company, a.paid from tableA a
inner join
(select person, company, row_number() over (partition by company order by paid desc) as rn from tableA) as t1
on t1.person = a.person and t1.company = a.company
where t1.rn = 1
也许像
WITH ranked AS (SELECT person, company, paid
, rank() OVER (PARTITION BY company ORDER BY paid DESC) AS rnk
FROM yourtable)
SELECT person, company, paid
FROM ranked
WHERE rnk = 1
ORDER BY company;
您可以在子查询中使用MAX()
,如下所示:
CREATE TABLE T(
Person VARCHAR(45),
Company CHAR(1),
Paid INT
);
INSERT INTO T
VALUES ('Person1', 'A', 10),
('Person2', 'A', 20),
('Person3', 'B', 10);
SELECT T.*
FROM T INNER JOIN
(
SELECT Company, MAX(Paid) Paid
FROM T
GROUP BY Company
) TT ON T.Company = TT.Company AND T.Paid = TT.Paid;
或者使用窗口函数作为
SELECT Person,
Company,
Paid
FROM
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY Company ORDER BY Paid DESC) RN
FROM T
) TT
WHERE RN = 1;
您可以使用带有partition by子句的rank()
函数。densite\u RANK
提供有序分区内的排名,但排名是连续的。如果存在包含多个项目的列组,则不会跳过任何列组
WITH cte AS (
SELECT person, company, paid
rank() OVER (PARTITION BY company ORDER BY paid desc) rn
FROM yourtable
)
SELECT
*
FROM cte
请将您的样本数据直接作为文本包含在问题中(最好是作为
创建表
和插入
语句以便于导入),而不是作为图像。请在问题中包含您的尝试;如果我们看不到你的尝试,我们就无法告诉你哪里出了问题。请不要以图片形式提供样本数据;提供格式为文本(或DDL和DML语句),以及预期结果。请更新您的帖子,以便我们可以帮助您。谢谢。你能解释一下为什么使用where子句“RN=1”吗?