합계, 평균, 최대, 최소, 중간, 표준편차 함수
조건에 맞는 데이터 개수 세기: COUNT, COUNT_BIG 함수
COUNT_BIG : 데이터 개수가 21억 개를 초과할 때
SELECT COUNT(*) FROM nasdaq_company
결과
8918
nasdaq_company 테이블에서 ipo_year열 기준으로 그룹화해서 각 ipo_year 그룹에 몇 건의 데이터가 있는지 확인
SELECT ipo_year, COUNT(*) FROM nasdaq_company
Group By ipo_year
Order By ipo_year
결과
ipo_year (열 이름 없음)
NULL 4
0 859
1970 29
1971 1
1972 19
1973 121
nasdaq_company 테이블에서 ipo_year열과 sector 열 기준으로 그룹화해서 각 ipo_year 그룹에 몇 건의 데이터가 있는지 확인
SELECT ipo_year, sector, COUNT(*) FROM nasdaq_company
Group By ipo_year, sector
Order By ipo_year desc, sector
결과
ipo_year sector (열 이름 없음)
2021 882
2021 Basic Industries 11
2021 Capital Goods 35
2021 Consumer Durables 23
COUNT 함수 사용시 주의점: 전체 열이 아닌 특정 열만 지정하면 해당 열의 NULL 값은 제외한다는 것이다. 따라서, 전체 데이터 개수와 COUNT 함수로 얻은 데이터 개수가 다를 수 있다.
COUNT 함수를 사용할 때 DISTINCT 문을 조합하면 NULL 값이 아닌 고유값의 데이터 개수를 얻을 수 있다.
SELECT COUNT(*) AS all_row, COUNT(sector) as sector_row, COUNT(DISTINCT sector) as sector_distinctFROM nasdaq_company
결과
all_row sector_row sector_distinct
8918 8893 13
데이터 합 구하기: SUM
SUM 함수는 모든 행의 값을 합하지만 DISTINCT 문을 조합해 중복값을 무시하고 고유값에만 SUM함수를 적용할 수 있다.
(열 이름 없음)
SELECT SUM(close_price) FROM nasdaq_company
(열 이름 없음)
586687.653691949
SELECT SUM(DISTINCT close_price) FROM nasdaq_company
(열 이름 없음)
542734.498325871
GROUP BY 문을 조합해 close_price 열의 데이터를 합산하된 sector 별로 그룹을 나눠 합산하는 쿼리이다.
SELECT sector, SUM(close_price) FROM nasdaq_company
GROUP BY sector
결과
sector (열 이름 없음)
Miscellaneous 10043.4614094049
Public Utilities 9197.7665861547
Consumer Non-Durables 12882.2909550816
Capital Goods 54474.5311808456
데이터 평균 구하기: AVG 함수
NULL 값은 무시한다. AVG 함수에서도 DISTINCT 문을 조합해 중복값을 무시하고 고유값에만 적용할 수 있다.
SELECT AVG(close_price) FROM nasdaq_company
(열 이름 없음)
70.2535808516285
SELECT AVG(DISTINCT close_price) FROM nasdaq_company
(열 이름 없음)
109.422277888281
SELECT sector, AVG(DISTINCT close_price) FROM nasdaq_company
GROUP BY sector
결과
sector (열 이름 없음)
NULL 9250.38984339436
29.7430143411333
Basic Industries 46.1039010662569
Capital Goods 112.043390873023
Consumer Durables 32.3150231354164
Consumer Non-Durables 56.8316413977109
평균을 구할 때 자료형에 유의해야 한다. 10/3의 경우 3.3333.. 이어야 하나 정수끼리 계산 결과 정수 3으로 취급해 버린다.
이런 상황을 해결하러면 평균을 구하려는 열의 형식을 float이나 decimal과 같은 실수형으로 변환한다.
SELECT 10/3
3
SELECT 10/CONVERT(FLOAT, 3)
3.3333333333
최솟값, 최댓값 구하기 : MIN, MAX 함수
SELECT MIN(close_price) , MAX(close_price) FROM nasdaq_company
WHERE close_price > 0
(열 이름 없음) (열 이름 없음)
0.00999999977648258 60775.8359375
그룹별로 최댓값, 최솟값을 구할 수 있다.
SELECT sector, MIN(close_price) , MAX(close_price) FROM nasdaq_company
WHERE close_price > 0
GROUP BY sector
결과
sector (열 이름 없음) (열 이름 없음)
Miscellaneous 0.140400007367134 759.25
Public Utilities 0.349999994039536 173.199996948242
Consumer Non-Durables 0.0750000029802322 517.969970703125
Capital Goods 0.0140000004321337 18600
Basic Industries 0.275400012731552 337.829986572266
NULL 값은 무시한다.
부분합, 총합 구하기: ROLLUP, CUBE 함수
GROUP BY 문을 ROLLUP 함수와 CUBE 함수에 조합한다.
GROUP BY ROLLUP(...)에 입력한 열을 기준으로 오른쪽에서 왼쪽으로 열을 이동하면서 부부합과 총합을 구한다.
SELECT sector, industry, SUM(close_price)
FROM nasdaq_company
GROUP BY ROLLUP(sector, industry)
결과
sector industry (열 이름 없음)
Technology Internet and Information Services 6546.67011141777
Technology Professional Services 440.450003147125
Technology Radio And Television Broadcasting And Communications Equipment 832.435785830021
Technology Retail: Computer Software & Peripheral Equipment 2489.53504157066
Technology Semiconductors 9120.26033765078
Technology Telecommunications Equipment 243.75
Technology NULL 62410.8200955242
233행의 결과는 sector가 Technology이고 industry가 Internet인 close_price의 이다.
오른쪽에서 왼쪽으로 이동하는 것은 industry 가 변하면서 sector가 변하지 않는 것을 보면 알 수 있다.
239행을 보면 industry가 NULL 인데 바로 여기가 sector 그룹에 대한 부분합이다.
같은 설명으로 sector, industry가 모두 NULL인 곳이 총합이다.
GROUP BY CUBE(a, b)의 경우 (a,b), (NULL, b), (a, NULL), (NULL, NULL)의 고윳값을 집계하는 그룹을 만든다.
SELECT sector, industry, SUM(close_price)
FROM nasdaq_company
GROUP BY CUBE(sector, industry)
모든 값의 표준편차 구하기:STDEV, STDEVP 함수
STDEV: 모든 값의 표준편차
STDEVP: 모집단의 표준편차
SELECT STDEV(close_price), STDEVP(close_price) FROM nasdaq_company
(열 이름 없음) (열 이름 없음)
989.751070100126 989.691808891793
SELECT STDEV(distinct close_price), STDEVP(distinct close_price) FROM nasdaq_company
(열 이름 없음) (열 이름 없음)
1282.7917240247 1282.66240382436
퀴즈 3. stock 테이블에서 symbol이 MSFT인 데이터의 2021년1월1일-2021년1월31일까지 주식 종가 중에 최솟값, 최댓값, 평균값을 구하세요.
SELECT
MIN([close]) as min_MSFT,
MAX([close]) as max_MSFT,
AVG([close]) as avg_MSFG
FROM stock
WHERE symbol = 'MSFT'
AND date >= '2021-1-1'
AND date < '2021-2-1'
결과
min_MSFT max_MSFT avg_MSFG
212.25 238.929992675781 221.975261487459
'IT Story > SQL Story' 카테고리의 다른 글
SQL 함수: 순위 함수 (0) | 2022.12.06 |
---|---|
SQL 함수: 수학 함수 (0) | 2022.12.05 |
SQL 함수: 날짜 함수 (0) | 2022.12.02 |
SQL 함수: 문자열 함수 (0) | 2022.12.02 |
공통 테이블 식(Common Table Expression, CTE) (0) | 2022.12.01 |