您好,以以下数据为例
id | value
----------
A | 3
A | 9
B | 7
B | 2
C | 4
C | 5
我想列出每个 id 组的最小值的所有数据库,以便预期输出为
id | value
----------
B | 2
B | 7
A | 3
A | 9
C | 4
C | 5
即A 组的 min 为 3,B 组为 2,C 组为 4,因此按升序先是 B 组,然后是 B 组的其余部分。接下来是 A 组,然后是 C 组
我尝试过,但这不是我想要的
SELECT * FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
GROUP BY id, value
ORDER BY MIN(value)
请帮忙!谢谢
最佳答案
SELECT * FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
ORDER BY MIN(value) OVER(PARTITION BY id), id, value
将 over() 子句添加到查询输出中,您可以看到它为您做了什么。
SELECT *,
MIN(value) OVER(PARTITION BY id) OrderedBy FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
ORDER BY MIN(value) OVER(PARTITION BY id), id, value
结果:
id value OrderedBy
---- ----- ---------
B 2 2
B 7 2
A 3 3
A 9 3
C 4 4
C 5 4
关于sql - T-SQL ORDER BY 基于组列的 MIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333453/