SQL_3. Introduction to SQL (2/2)

소고기는레어·2020년 11월 14일
0
post-thumbnail

집계 함수

AVG, MAX, MIN, SUM

AVG MAX MIN SUM

AVG 는 해당 열의 평균값을, MAX 는 해당 열의 최고값을, 반대로 MIN 은 최저값을 구해주며. 또한 SUM은 해당 열의 총합을 구해준다.

예시는 다음과 같다

SELECT
	AVG(population)
FROM
	city;

이 Query는 모든 도시의 평균 인구를 불러온다.

SELECT
	MAX(population)
FROM
	city;

이 Query는 모든 도시 중 인구수가 가장 많은 도시의 인구수를 불러온다. 반대로 MIN(population)을 입력하면 최저 인구수를 가진 도시의 인구를 불러온다.

SELECT
	SUM(population)
FROM
	city;

마지막으로 이 Query는 모든 도시의 인구수를 합해서 출력해준다.

사칙연산(+-*/)

+ - * /

집계 함수 외에 간단한 사칙연산도 가능하다.

SELECT
	(4 * 3);

위의 Query는 12라는 결과를 불러온다.
하지만 밑의 Query에 주목해보자.

SELECT
	(4 / 3);

이 Query는 1이라는 결과를 불러온다. 사칙연산이 소수점이 없는 정수로 이루어져있으면 결과도 소수점이 없는 정수로 제공되기 때문이다.
따라서 더 정확한 결과를 원한다면

SELECT
	(4.0 / 3.0);

이런 식으로 소수점을 붙이면 된다. 위의 Query는 1.333... 이라는 결과를 출력한다.

AS

AS

AS 는 도출되는 결과의 각 Column에 별칭을 부여한다.
다음과 같은 사용할 수 있다.

SELECT
	MAX(population) AS max_population,
    	city_name
FROM 
	city;

이러한 Query는 결과를 출력할 때 MAX함수 부분을 max_population이라는 별칭으로 출력하기에 직관적인 결과 확인이 가능하다.

ORDER BY

ORDER BY

ORDER BY 는 출력되는 결과의 정렬 기준을 정할 때 사용된다.
정렬 기준은 복수 적용이 가능하고 기본값은 오름차순이며, 내림차순은 DESC 로 변경할 수 있다.
다음 예시와 같이 사용한다.

SELECT
	city_name
FROM
	city
ORDER BY 
	city_name,
    population;

위의 Query는 도시 이름을 알파벳 오름차순, 그리고 인구수 오름차순으로 정렬하게 된다.

SELECT
	city_name
FROM
	city
ORDER BY 
	city_name DESC;

이 QUERY는 도시 이름을 알파벳 내림차순으로 정렬하게 된다.

GROUP BY

GROUP BY

GROUP BYCOUNT(), MAX() 와 같은 집계함수와 같이 사용되며 어떤 기준으로 집계함수의 결과를 불러올지 결정하게 된다.
예시는 아래와 같다.

SELECT
	country,
    COUNT(*)
FROM
	city
GROUP BY
	country;

위의 Query는 COUNT(*) 를 country를 기준으로 잡아주었으므로 국가별 도시의 수를 결과로 불러오게 된다.

HAVING

HAVING

집계함수를 기준으로 결과를 필터링 하려면 어떻게 해야할까? 기본적으로 우리가 필터링에 사용하는 WHERE 절에는 집계함수를 사용할 수가 없다. 그렇기에 우리는 집계함수를 적용할 다른 문법이 필요한데, HAVING 이 바로 그 조건에 충족한다.
다음 예시를 살펴보도록 하자.

SELECT
	country,
    COUNT(*)
FROM
	city
GROUP BY
	country
HAVING
	COUNT(*) > 1000;

이 예시는 바로 위 GROUP BY 에서 사용한 예시와 동일하게 국가별 도시의 수를 결과로 불러오게 된다. 하지만 HAVING COUNT(*) > 1000 을 추가함으로서 도시의 수가 1000개가 넘는 국가만 결과로 불러오게 된다.

LIMIT

LIMIT

LIMIT 은 불러오는 결과의 개수를 제한한다. ORDER BY와 함께 사용하여 TOP10 혹은 BEST10 과 같은 결과를 구할 수 있게 된다.

SELECT
	city_name,
    population
FROM 
	city
ORDER BY 
	popluation DESC
LIMIT 10;

이 Query는 인구수가 많은 도시 TOP10을 결과로 불러오게 된다.

응용

지금까지 배운 것들을 모두 사용해면 아래와 같은 Query도 작성할 수 있게 된다.

도시가 100개를 넘는 국가의 평균 도시 인구수 TOP10을 불러오는 Query

SELECT
	country,                          ###국가 이름을 출력
    AVG(popluation) AS avg_population ###도시 인구수의 평균 출력
FROM  
	city                              ###city 테이블에서
GROUP BY
	country                           ###각 국가별 도시 인구수의 평균
HAVING
	COUNT(city_name) > 100            ###도시 개수가 100개가 넘는 국가만 출력
ORDER BY
	avg_population DESC               ###평균 인구수의 내림차순으로 정렬
LIMIT 10;                             ###결과 출력수 10개 제한

이외에도 다양한 Query들을 작성하여 많은 데이터를 구할 수 있으나
각 문법의 역할 혹은 사용법이 헷갈리게 된다면 갈피를 잡지 못하는 경우도 있으므로
여러 상황에 맞게 응용해가며 복습해서 각 문법에 대한 이해를 확실히 하는 것이 중요하다고 생각한다.

profile
https://www.rarebeef.co.kr/

0개의 댓글