문제

Hi take the following data as an example

id | value
----------
 A |   3
 A |   9
 B |   7
 B |   2
 C |   4
 C |   5

I want to list out all the data base on the min value of each id group, so that the expected output is

id | value
----------
 B |   2
 B |   7
 A |   3
 A |   9
 C |   4
 C |   5

i.e. min of group A is 3, group B is 2, group C is 4, so group B first and then the rest of group B in ascending order. Next group A and then group C

I tried this but thats not what I want

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)

Please help! Thank you

도움이 되었습니까?

해결책

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 Clause (Transact-SQL)

Add the over() clause to your query output and you can see what it does for you.

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

Result:

id   value OrderedBy
---- ----- ---------
B    2     2
B    7     2
A    3     3
A    9     3
C    4     4
C    5     4
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top