중복 값을 제거하는 키워드 DISTINCT
SELECT문에서 조회하려는 칼럼의 중복 값을 제거해준다.
집계 함수와 같이 사용할 수 있다.
SELECT DISTINCT COLUMN1, COLUMN2 FROM TABLE
칼럼 1, 칼럼 2의 중복 값을 제거한 뒤 레코드를 보여준다.
SQL의 집계 함수
SQL에서 집계함수는 이미 기록된 레코드들의 정보를 모아서 계산하는 함수를 이야기합니다.
다양한 함수가 있지만 가장 자주 쓰는 5개의 함수가 있습니다.
SUM MAX MIN AVG COUNT
1. COUNT(COLUMN_NAME)
데이터의 개수를 세는 집계 함수입니다.
SELECT COUNT(COLUMN) FROM TABLE;
칼럼에 있는 데이터의 개수를 반환합니다.
로우의 총 갯수를 계산해주며, 칼럼명 대신 *를 넣을 수도 있습니다.
COUNT(DISTINCT COLUMN_NAME)을 사용하면 중복된 데이터가 존재했을 때 중복을 제외한 로우의 총개수를 반환합니다.
또한 COUNT함수는 NULL값을 세지 않습니다.
집계 함수는 NULL값을 제외하고 집계를 하기 때문에
만약 AVG에서 값 중에 NULL값이 존재한다면 날이 있는 데이터를 제외하고 평균을 구하기 때문에 유의해야 합니다.
그때 NVL함수를 이용하면 NULL값을 처리할 수 있습니다. NVL(COLUMN_NAME, 설정 데이터 값)
또한 COUNT(칼럼)에 두개의 칼럼을 동시에 카운트할 수는 없습니다. 각 각 따로 출력해야 합니다.
2.SUM(칼럼)
수치 데이터 칼럼의 합계를 출력해주는 함수입니다.
SELECT SUM(COLUMN) FROM TABLE;
3. AVG(COLUMN)
수치 데이터 칼럼의 평균을 출력하는 함수입니다.
NULL값을 유의해야합니다.
SELECT AVG(COLUMN) FROM TABLE;
4.MAX(COLUMN),
5.MIN(COLUMN)
수치 데이터 칼럼의 최대,최소값을 반환하는 함수입니다.
SELECT MAX(COLUMN) FROM TABLE;
SELECT MIN(COLUMN) FROM TABLE;
집계 함수로 데이터를 조회할 때 유용한 GROUP BY라는 키워드와 HAVING이라는 키워드가 있습니다.
SELECT FROM WHERE GROUP BY HAVING ORDER BY 순서를 기억해두시면 좋습니다. SELECT을 제외한 실행 순서이며 순서가 뒤바뀌면 오류가 발생합니다.
SELECT은 맨 마지막에 실행됩니다.
GROUP BY
집계함수를 사용할 때 붙이는 키워드입니다.
회사 부서의 칼럼이 존재할 때 회사 부서마다의 평균 월급을 구한다고 한다면
SELECT 회사 부서, avg(월급)
FROM 회사
GROUP BY 회사부서;
회사 부서로 그룹을 지어서 부서별의 평균 월급을 구할 수 있습니다.
또한 여러개의 칼럼으로 분류해 세부적으로 데이터를 구분 지을 수 있습니다.
SELECT 회사 부서, 직급, avg(월급)
FROM 회사
GROUP BY 회사부서, 직급;
이제 그룹별 데이터를 조회했다면 정렬이 필요합니다.
ORDER BY 출력된 결과를 정렬하기 위해 ORDER BY 문을 사용합니다.
HAVING
그룹된 데이터를 활용하기 위해 HAVING을 사용합니다. GROUP BY보다 WHERE가 먼저 실행되기 때문에 그룹이 되지 않은 상태에서 조건절인 WHERE이 실행될 수 있습니다. 따라서 먼저 GROUP BY을 실행한 뒤 실행되는 HAVING이 존재합니다.
WHERE 조건문은 데이터를 조작 전에 가져오는 것이고, HAVING은 데이터의 조작이 끝난 후 출력 값을 가져오는 것입니다.
HAVING문에는 SELECT LIST에서 명시한 칼럼과 그룹 함수를 사용한 칼럼에 대해서만 조건을 줄 수 있습니다.
또한 HAVING은 조작이 끝난 상태이므로 그룹 함수의 칼럼을 이용할 수 있습니다.
SELECT 프로그램언어,SUM(조회수)
FROM 블로그
GROUP BY 프로그램언어
HAVING SUM(조회수) >=2000;
블로그 테이블에서 언어별 2000이 넘는 조회수로 데이터를 조회합니다.
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 33일차 -53 (0) | 2020.04.17 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 32일차 -52 (0) | 2020.04.16 |
자바기반의 웹&앱 응용 SW개발자 양성과정 30일차 -50 (0) | 2020.04.10 |
자바기반의 웹&앱 응용 SW개발자 양성과정 29일차 -49 (0) | 2020.04.09 |
자바기반의 웹&앱 응용 SW개발자 양성과정 29일차 -48 (0) | 2020.04.09 |
댓글