[SQL첫걸음]181108
COUNT
- 행 개수를 구할 때 사용한다.
- 집계함수: 일반적으로 함수는 인수로 하나의 값을 지정하는데 집계함수는 인수로 집합을 지정
- COUNT(열명 or 식)
- WHERE 구랑 같이 사용하는 것도 가능하다.
- SELECT COUNT(*) FROM sample51 WHERE name = 'A';
- *는 모든 열을 뜻한다.
- NULL값은 카운트 되지 않는다. (모든 집계함수 동일)
- 특정열의 행에 NULL이 있으면 NULL을 뺀 나머지 숫자를 반환한다.
- *로 하면 NULL이 없는 열이 있다면 없는 열을 기준으로 값이 출력된다.
DISTINCT
- 중복 된 값을 제외하고 출력한다. (집계함수)
- SELECT DISTINCT 열이름 FROM 테이블이름;
- 예약어로 콤마를 붙이지 않는다.
- COUNT와 같이 사용해 열에서 유니크한 값이 몇 개 있는지 구할 수 있다.
- SELECT COUNT(DISTINCT name) FROM sample51;
SUM, AVG, MIN, MAX
- 집계함수, NULL 값 무시
- SUM, AVG 수치형만 계산 / MIN, MAX 수치형, 문자열형, 날짜시간형 모두 가능
- AVG에서 NULL값은 무시가 되기 때문에 NULL을 0으로 두고 계산하고 싶으면 CASE로 변환 후 계산해야 한다. (평균 구할 때 분모가 달라짐)
GROUP BY
- 그룹화 할 때 이용하는 구문
- SELECT * FROM 테이블명 GROUP BY 열1, 열2, ...
- 지정한 열명을 기준으로 그룹이 생겨난다.
- 지정 된 열의 값이 같은 행은 하나의 그룹으로 묶인다. (중복이 제거 된다.)
- 집계함수는 WHERE구의 조건식에서는 사용할 수 없다.
- 내부순서 처리 때문
(WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY) - HAVING구를 이용해 조건을 걸어야 한다.
- HAVING과 WHERE모두 조건절 이지만 HAVING은 그룹화 된 곳에만 사용할 수 있다.
- ex.
SELECT name, COUNT(name) FROM sample51
WHERE COUNT(name) = 1 GROUP BY name; (X) - SELECT name, COUNT(name) FROM sample51
GROUP BY name HAVING COUNT(name) = 1 (O) - GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.
- SELECT no, name, quantity FROM sample51 GROUP BY name; (X)
- no, quantity는 GROUP BY로 지정하지 않아 SELECT에 들어갈 수 없음
- GROUP BY을 하면 중복값이 제거 되는데 다른 열은 어떤 게 들어가야 좋을지 알 수 없어서.
ex. name에 A가 2개 있고 A와 연결 된 quantity가 1 과 2가 있는 경우
어떤 quantity을 결과값으로 출력할 지 알 수 없어서 오류(또는 임의의 값 출력) - 집계함수는 한개의 값만 출력하니 SELECT에 들어 갈 수 있다.
- SELECT MIN(no), name, SUM(quantity) FROM sample51 GROUP BY name; (O)
- ORDER BY을 통해 정렬 할 수 있다.
댓글
댓글 쓰기