sql에서의 조건문은 2가지 방법이잇다
1. selcet절에서 case when ~조건~ then ~출력원하는거~ end as ~이름~
2. where ~조건~
두개의 차이는 select case.는 새로운 column(열)을 만든다!
하지만 where은 해당 조건만을 뽑아낸다
이를 이용하여 피벗테이블을 만들수있는데
case문을 통해 새로운 column(열)을 만들고!
group by 를 통해서 새로운 Row(행)을 만들수잇다
ex) 이해를 위한 시각화 정리
https://leetcode.com/problems/reformat-department-table/submissions/
1 . select *
from Department
실행시
Department
id | revenue | month |
1 | 8000 | Jan |
2 | 9000 | Jan |
3 | 10000 | Feb |
1 | 7000 | Feb |
1 | 6000 | Mar |
로 출력되고
2.
select id, sum(case when month = "Jan" then revenue end) as Jan_Revenue
from Department
group by id
실행시
id | Jan_Revenue |
1 | 8000 |
2 | 9000 |
3 | null |
실행시 case 문이 새로운 column(열)인 Jan_Revenue을 만들고
group by로 지정된 id가 row(행)으로서 Jan_Revenue값을 쪼갠다
3. 추가적으로 case문은 한개가 아니라 여러개가 가능하며
select id, sum(case when month = "Jan" then revenue end) as Jan_Revenue,
sum(case when month = "Feb" then revenue end) as Feb_Revenue
from Department
group by id
를 실행시
id | Jan_Revenue | Feb_Revenue |
1 | 8000 | 7000 |
2 | 9000 | null |
3 | null | 10000 |
로서 새로운 column(열)을 추가할수있다
또한 CASE 조건문을 중첩하여 사용할수도 잇는데
https://www.hackerrank.com/challenges/what-type-of-triangle/problem?isFullScreen=true'
select *
FROM TRIANGLES
실행시
A | B | C |
10 | 10 | 10 |
11 | 11 | 11 |
30 | 32 | 0 |
40 | 40 | 40 |
20 | 20 | 21 |
21 | 21 | 21 |
20 | 20 | 40 |
20 | 22 | 21 |
~ | ~ | ~ |
의 데이터가 출력되는데
이떄 CASE문을 통하여
세변의 길이가 같은건 Equilateral
두변의 길이가 같으면 Isosceles
한변이 두변의 합보다 같거나 다르면 Not A Triangle
모두 아니라면 Scalene
로 4개의 조건을 중첩하여 다중조건문을 만들수있다
select case when a= b and b = c and c = a then "Equilateral"
-- A와 B와 C가 모두 같으면 정상각형
when a + b <= c or b+c <= a or c+a <= b then "Not A Triangle"
-- 두변의 합이 한변의 합보다 작거나 같으면 삼각형이 아니다
( 이떄 다중 CASE문에는 맨처음에 CASE를 쓰고 맨끝에 END를 각 한번씩 사용하며
다음 조건을 사용시 when부터 시작하면된다 )
when a =b or b=c or c=a then "Isosceles"
else "Scalene"
end
from TRIANGLES
실행시
-
Equilateral
-
Equilateral
-
Isosceles
-
Equilateral
-
Isosceles
-
Equilateral
-
Scalene
-
Not A Triangle
-
Scalene
또한 코드 작성중 제대로 조건이 만들어 졌는지 확인하기 위해
end뒤에 , *이나 column명을 넣어 원래 데이터들이 뭐였는지 확인해보는것이 좋다
'SQL' 카테고리의 다른 글
sqld rollup,cube ~윈도우함수 (108~127) (1) | 2023.05.30 |
---|---|
sql 의 쿼리 실행 순서 (1) | 2023.02.21 |
WHERE,HAVING 의 차이 (0) | 2023.02.14 |
[MY SQL] JOIN과 UNION (0) | 2023.02.07 |
DDL, DML, DCL,TCL (0) | 2023.02.05 |
댓글