最高音量 T-SQL
Top volume T-SQL
在上面,我想将第一个数据集转换为后者。目标是按最高音量对数字进行排序,然后 select 这些数字中的前 2 个字母按音量降序排列。 T-SQL 中的任何解决方案?谢谢!
这是一个经典的 limit-per-group 问题,可以使用常见的 table 表达式和 row_number()
.
轻松解决
首先,创建并填充示例 table(请在您以后的问题中省去这一步)
DECLARE @T as TABLE
(
Number int,
Letter char(1),
Volume int
);
INSERT INTO @T (Number, Letter, Volume) VALUES
(1,'A',230),
(1,'B',534),
(1,'C',23),
(1,'D',42),
(2,'D',566),
(2,'E',24),
(2,'F',566);
-- you can add more records but this should be enough for this demonstration
然后,对组使用带有 row_number()
和 max(...) over...
的通用 table 表达式,并按以下顺序排序:
WITH CTE AS
(
SELECT Number,
Letter,
Volume,
ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Volume DESC) As rn,
MAX(Volume) OVER(PARTITION BY Number) As MaxVolume,
FROM @T
)
查询:
SELECT Number, Letter, Volume
FROM @T
WHERE rn <= 2
ORDER BY MaxVolume DESC
结果:
Number Letter Volume
2 D 566
2 F 566
1 B 534
1 A 230
在上面,我想将第一个数据集转换为后者。目标是按最高音量对数字进行排序,然后 select 这些数字中的前 2 个字母按音量降序排列。 T-SQL 中的任何解决方案?谢谢!
这是一个经典的 limit-per-group 问题,可以使用常见的 table 表达式和 row_number()
.
首先,创建并填充示例 table(请在您以后的问题中省去这一步)
DECLARE @T as TABLE
(
Number int,
Letter char(1),
Volume int
);
INSERT INTO @T (Number, Letter, Volume) VALUES
(1,'A',230),
(1,'B',534),
(1,'C',23),
(1,'D',42),
(2,'D',566),
(2,'E',24),
(2,'F',566);
-- you can add more records but this should be enough for this demonstration
然后,对组使用带有 row_number()
和 max(...) over...
的通用 table 表达式,并按以下顺序排序:
WITH CTE AS
(
SELECT Number,
Letter,
Volume,
ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Volume DESC) As rn,
MAX(Volume) OVER(PARTITION BY Number) As MaxVolume,
FROM @T
)
查询:
SELECT Number, Letter, Volume
FROM @T
WHERE rn <= 2
ORDER BY MaxVolume DESC
结果:
Number Letter Volume
2 D 566
2 F 566
1 B 534
1 A 230