728x90
use BaseballData;
/*
SELECT*,
case birthMonth
when 1 then N'겨울'
when 2 then N'겨울'
when 3 then N'봄'
when 4 then N'봄'
when 5 then N'봄'
when 6 then N'여름'
when 7 then N'여름'
when 8 then N'여름'
when 9 then N'가을'
when 10 then N'가을'
when 11 then N'가을'
when 12 then N'겨울'
else N'오류'
end AS birthSeason
FROM players;
*/
SELECT*,
CASE
when birthMonth <= 2 Then N'겨울'
when birthMonth <= 5 Then N'봄'
when birthMonth <= 8 Then N'여름'
when birthMonth <= 11 Then N'가을'
ELSE N'겨울'
END AS birthSeason
FROM players;
CASE 같은 경우 코드의 SWITH와 비슷한 문법이다.
이렇게 되면 결과 값으로

이렇게 하나의 줄에 birthSeason이라는 값이 출력되어 나오는걸 볼 수 있다.
만약 case 문에 포함되지 않는 경우 오류가 아닌 NULL값이 들어오는걸 유의하자.
집계함수
1. COUNT
SELECT COUNT(*)
FROM players;
--players의 모든 데이터 크기
select count(birthYear)
from players;
-- birthYear의 NULL 값을 제외한 데이터 크기
SELECT DISTINCT birthCity
from players;
-- players의 birthCity의 중복되지 않는 모든 데이터 셀을 출력한다.
select DISTINCT birthYear, birthMonth, birthDay
from players
order by birthYear;
-- players의 중복되지 않는 위의 3가지 데이터를 birthYear 기준으로 정렬(내림차순 기본)한다.
select count(distinct birthCity)
from players;
-- players의 중복되지 않는 출생지의 데이터 총 갯수
-- count는 select과 호환이 되므로 상위(우선시 되는) 함수라고 예산한다. 그러므로 ()를 하지 않는다면,
-- 순서는 1. count 발생 2. 출생지 필터링 시작이므로 둘다 이루어 지지 않음
2. AVG (평균) / SUM(합) / MIN (최소값) / MAX(최대값)
use BaseballData;
SELECT AVG(weight)
from players;
--players의 평균 몸무게 182
select SUM(weight) / count(weight)
from players;
/*
같은 문법 182
null 값이 아닌 모든 weight의 값 / null 값이 아닌 weight의 수
----- 참고용 -----
select count(weight)
from players; 15682
select count (*)
from players; 16564
*/
select SUM(weight) / count(*)
from players;
-- 집계함수는 NULL값을 기본적으로 무시하므로 값이 달라진다. 173
select AVG(case when weight is null then 0 else weight end)
from players;
-- weight 값이 NULL 값이면 0 값, 그 외는 weight 값을 반환해라 => 평균을 추출한다. 173
select min(weight), MAX(weight)
from players;
-- players의 weight 최소값, 최대값