본문 바로가기
공부/SQL

SQL 10 – Window functions

by 혼밥맨 2022. 1. 13.
반응형

SQL 10 – Window functions


Database


Problems

문제 1. 2017년 선거구 'S14000024'의 성, 정당 및 투표를 보여주세요.
정답
1
2
3
4
5
6
7
8
9
SELECT lastName, party, votes
 
FROM ge
 
WHERE constituency = 'S14000024'
 
      AND yr = 2017
 
ORDER BY votes DESC
cs

 

 

문제 2. RANK 기능을 사용하여 후보들의 순서를 확인할 수 있습니다. (Order By votes DESC)를 사용하여 순위를 매기면 가장 많은 표를 얻은 후보가 1위를 차지하게 됩니다.
정답
1
2
3
4
5
6
7
8
9
SELECT party, votes,
 
       RANK() OVER (ORDER BY votes DESC) as posn
 
FROM ge
 
WHERE constituency = 'S14000024' AND yr = 2017
 
ORDER BY party ASC
cs

 

 

 

문제 3. 2015년 선거는 2017년 선거와는 다른 파티션입니다. 우리는 매년 투표 순서만 신경 씁니다.

매년 S14000021에서 각 파티의 순위를 나타내려면 파티션을 사용합니다. yr, 정당, 투표 및 순위를 포함합니다(가장 많은 표는 1).

정답
1
2
3
4
5
6
7
8
9
10
11
SELECT yr, party, votes,
 
      RANK() OVER (PARTITION BY yr
 
                   ORDER BY votes DESC) as posn
 
FROM ge
 
WHERE constituency = 'S14000021'
 
ORDER BY party, yr
cs

 

문제 4. Edinburgh constituencies are numbered S14000021 to S14000026.

Use PARTITION BY constituency to show the ranking of each party in Edinburgh in 2017. Order your results so the winners are shown first, then ordered by constituency.

에든버러 선거구의 번호는 S14000021 ~ S140026입니다. 2017년 에든버러에서 각 정당의 순위를 나타내려면 PARTION BY 선거구를 사용하세요. 당선자가 먼저 표시되도록 결과를 정렬한 다음 선거구별로 정렬합니다.
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT constituency, party, votes,
 
       RANK() OVER (PARTITION BY constituency
 
                    ORDER BY votes DESC) AS winner
 
FROM ge
 
WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
 
AND yr  = 2017
 
ORDER BY winner, constituency
cs

 

문제 5. You can use SELECT within SELECT to pick out only the winners in Edinburgh.
Show the parties that won for each Edinburgh constituency in 2017.
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT constituency, party
 
FROM (SELECT constituency, party, votes,
 
             RANK() OVER (PARTITION BY constituency
 
                          ORDER BY votes DESC) as posn
 
      FROM ge
 
      WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
 
            AND yr = 2017) RK
 
WHERE RK.posn = 1
cs

 

문제 6. Count와 GROUP BY를 사용하여 각 당이 스코틀랜드에서 어떻게 했는지 확인할 수 있습니다. 스코틀랜드 선거구는 'S'로 시작합니다.
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT party,COUNT(*)
 
FROM (
 
      SELECT constituency, party, votes,
 
             RANK() OVER (PARTITION BY constituency
 
                          ORDER BY votes DESC) as posn
 
      FROM ge
 
      WHERE constituency LIKE 'S%'
 
            AND yr  = 2017) RT
 
WHERE RT.posn=1
 
GROUP BY RT.party
cs

 

반응형

'공부 > SQL' 카테고리의 다른 글

Programmers 프로그래머스 SQL 문제풀이 01  (0) 2022.01.21
SQL 11 – Self Join  (0) 2022.01.13
SQL 09 – Numeric Examples  (0) 2022.01.13
SQL 08 – More JOIN operations  (0) 2022.01.13
SQL Zoo 07 - JOIN  (0) 2022.01.11

댓글