SQL(3)(order by, aggregate functions, count, sum, min, max, avg)
ORDER BY
하나 이상의 열에 있는 데이터를 기반으로 결과를 재정렬 할 수 있다.
1 2 3 | SELECT * FROM tutorial.billboard_top_100_year_end ORDER BY artist | cs |
결과가 artist열의 내용에 따라 a부터 z까지 알파벳순으로 정렬되어 있음을 알 수 있다. 이를 오름차순이라고 한다. 기본값이다. 숫자는 작은숫자부터 큰숫자로 정렬된다.
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year = 2013 ORDER BY year_rank DESC | cs |
결과를 반대(내림차순)으로 표시하려면 DESC연산자를 추가해야한다.
연습문제
Z에서 A까지 노래 제목순으로 2012년의 모든 행을 반환하는 쿼리
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year = 2012 ORDER BY song_name DESC | cs |
여러 열로 데이터 정렬
order by절의 열은 쉼표로 구분해야한다.
DESC연산자는 앞에있는 열만 적용된다.
순서의 차이가 있다.
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year_rank <= 3 ORDER BY year DESC, year_rank | cs |
최근연도가 먼저 나오지만 순위가 낮은 노래보다 상위 순위의 노래를 정렬한다.
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year_rank <= 3 ORDER BY year_rank, year DESC | cs |
연습문제
아티스트가 각 노래에 대해 알파벳순으로 정렬 된 2010년의 모든 행을 순위 순으로 반환하는 쿼리
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year = 2010 ORDER BY year_rank, artist | cs |
주석
1. --를 사용하여 주어진 줄에서 오른쪽에 있는 모든 것을 주석처리 할 수 있다.
2. /* 주석을 시작하고, */ 주석을 닫는 데 사용하여 여러 줄에 주석을 남길 수 있다.
연습문제
T-Pain이 그룹 구성원이었던 모든 행을 차트에서 순위에 따라 가장 낮은 순위에서 가장 높은 순위로 표시하는 쿼리
1 2 3 4 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE "group" ILIKE '%t-pain%' ORDER BY year_rank DESC | cs |
1993, 2003 또는 2013년에 10에서 20을 포함하는 순위의 노래를 반환하는 쿼리를 작성, 연도 및 순위별로 결과를 정렬하고 해당 줄의 기능을 나타내는 각 줄에 주석을 남긴다.
1 2 3 4 5 | SELECT * FROM tutorial.billboard_top_100_year_end WHERE year IN (2013, 2003, 1993) --연도 선택 AND year_rank BETWEEN 10 AND 20 --순위 10~20 ORDER BY year, year_rank | cs |
AGGREGATE FUNCTIONS
- COUNT : 특정 열에있는 행 수를 계산
- SUM : 특정 열의 모든 값을 더한다.
- MIN, MAX : 각각의 특정 항목의 최소값 및 최대값을 반환
- AVG : 선택한 값 그룹의 평균을 계산
집계함수는 열로만 집계된다. 행에 대해 계산을 수행하려면 간단한 산술로 수행해야한다.
COUNT
특정 열의 행 수를 계산하는 집계함수이다.
모든 행 계산
1 2 | SELECT COUNT(*) FROM tutorial.aapl_historical_stock_price | cs |
개별 열 계산
1 2 | SELECT COUNT(high) FROM tutorial.aapl_historical_stock_price | cs |
전체와 개별이 결과가 다른 이유는 null값이 세어지지 않기 때문이다.
연습문제
low열에서 null이 아닌 행의 수를 계산하는 쿼리를 작성
1 2 | SELECT COUNT(low) AS low FROM tutorial.aapl_historical_stock_price | cs |
숫자가 아닌 열 계산
1 2 | SELECT COUNT(date) AS count_of_date FROM tutorial.aapl_historical_stock_price | cs |
1 2 | SELECT COUNT(date) AS "Count Of Date" FROM tutorial.aapl_historical_stock_price | cs |
열 이름을 지정할 때 위와 같이 공백이 있는 경우 ""를 사용하면 된다.
연습문제
모든 단일 열의 개수를 결정하는 쿼리를 작성. null값이 가장 많은 열은 무엇입니까?
1 2 3 4 5 6 7 8 | SELECT COUNT(year) AS year, COUNT(month) AS month, COUNT(open) AS open, COUNT(high) AS high, COUNT(low) AS low, COUNT(close) AS close, COUNT(volume) AS volume FROM tutorial.aapl_historical_stock_price | cs |
high
SUM
주어진 열의 값을 합산하는 집계함수이다. 숫자 값이 포함 된 열에만 사용이 가능하다.
null을 0으로 취급한다.
1 2 | SELECT SUM(volume) FROM tutorial.aapl_historical_stock_price | cs |
연습문제
평균 시가를 계산하는 쿼리를 작성(count, sum을 모두 사용)
1 2 | SELECT sum(open)/count(open) as open_avg FROM tutorial.aapl_historical_stock_price | cs |
MIN, MAX
특정 열에서 최소값 및 최대값을 반환하는 집계함수이다. 숫자가 아닌 열에 사용할 수 있다.
1 2 3 | SELECT MIN(volume) AS min_volume, MAX(volume) AS max_volume FROM tutorial.aapl_historical_stock_price | cs |
연습문제
Apple의 최저 주가는 얼마입니까?
1 2 | SELECT MIN(low) FROM tutorial.aapl_historical_stock_price | cs |
Apple의 주가가 하루에 가장 많이 증가한 것은 무엇입니까?
1 2 | SELECT MAX(close - open) FROM tutorial.aapl_historical_stock_price | cs |
AVG
선택한 그룹의 평균을 계산하는 집계함수이다. 숫자열에서만 사용이 가능하다. null이 무시된다.
다음을 보면 null값이 무시된다는 것을 확인할 수 있다.
1 2 3 | SELECT AVG(high) FROM tutorial.aapl_historical_stock_price WHERE high IS NOT NULL | cs |
1 2 | SELECT AVG(high) FROM tutorial.aapl_historical_stock_price | cs |
연습문제
Apple주식의 일일 평균 거래량을 계산하는 쿼리
1 2 | SELECT AVG(volume) AS avg_volume FROM tutorial.aapl_historical_stock_price | cs |














댓글
댓글 쓰기