SQL

SQL 조건문

monawa 2022. 10. 1.
728x90

 

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명을 넣어 원래 데이터들이 뭐였는지 확인해보는것이 좋다 

 

 

728x90

'SQL' 카테고리의 다른 글

sqld rollup,cube ~윈도우함수 (108~127)  (1) 2023.05.30
sql 의 쿼리 실행 순서  (0) 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

댓글