반응형
1. SELECT 구절 작성 순서
1. SELECT 구절 작성 순서
2. SELECT 구절 처리 과정
0. 처리 순서
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
1. FROM city : 데이터 가공 처리를 위한 격자형 데이터 구조(테이블/레코드 연산)를 마련
2. WHERE `Population` > 200000 : 레코드 필터링
3. GROUP BY `CountryCode` : 집계(COUNT/AVG/MIN/MAX)
4. HAVING `CNT` >= 2 : 집계된 레코드에서 필터링
★집계함수(COUNT/AVG/MIN/MAX)는 WHERE 절에서 사용 할 수 없다.
5. SELECT
6. ORDER BY `CNT` DESC : 정렬
7) 다 합치면 ?
SELECT COUNTRYCODE, COUNT(COUNTRYCODE) CNT
FROM CITY
WHERE POPULATION > 5000000
GROUP BY COUNTRYCODE
HAVING CNT >=2
ORDER BY CNT DESC, COUNTRYCODE ASC;
3. SELECT 구절 사용
1. 정렬하기(ORDER BY) : 오름차순(ASC) / 내림차순(DESC)
> 공지사항 테이블에서 조회수가 가장 많은 순서로 출력하시오
SELECT ID, TITLE, WRITER_ID, HIT, REGDATE
FROM NOTICE
ORDER BY HIT;
-- 2차 정렬
SELECT ID, TITLE, WRITER_ID, HIT, REGDATE
FROM NOTICE
ORDER BY HIT DESC, REGDATE DESC;
2. 집계 함수와 GROUP BY : SUM, MIN, MAX, COUNT, AVG
1) 컬럼 전체를 대상으로 집계(분석)
SELECT SUM(HIT) FROM NOTICE;
SELECT AVG(HIT) FROM NOTICE;
2) 소규모 그룹으로 나눠서 집계(분석)
SELECT COUNT(ID) FROM NOTICE;
SELECT COUNT(ID) FROM NOTICE GROUP BY WRITER_ID;
3) HAVING 절
> 공지사항 테이블에서 작성자별 글 올린 개수를 출력하시오 (단, 게시글 수가 2회 이상인 작성자만 출력)
-- 틀린 예시
SELECT WRITER_ID, COUNT(ID)
FROM NOTICE
WHERE COUNT(ID) >= 2;
GROUP BY WRITER_ID;
-- 맞는 예시
SELECT WRITER_ID, COUNT(ID) CNT
FROM NOTICE
GROUP BY WRITER_ID
HAVING CNT >= 2
ORDER BY CNT DESC;
-- 순서:
FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY
|----- 집계함수 사용가능 영역 ------>
> city 테이블에서 population이 최대인 행을 출력하시오
-- 틀린 예시 (이유 : where절에는 집계함수를 쓸 수 없음)
select * from city where population = max(population);
3. 순위함수
1) ROW_NUMBER() OVER()
2) RANK OVER()
3) DENSE_RANK OVER()
> 조회수에 따른 순위
-- 1. ROW_NUMBER() : 말 그대로 row number을 출력해줌
SELECT TITLE, WRITER_ID, HIT,
ROW_NUMBER() OVER(ORDER BY HIT DESC) `RANK`
FROM NOTICE;
-- 2. RANK() : 순위를 나타냄(20등이 3개 일 경우 그 다음 순위는 23등)
(RANK()는 똑같은 hit를 가진 애들을 같은 순위를 나타내게 해줌)
SELECT TITLE, WRITER_ID, HIT,
RANK() OVER(ORDER BY HIT DESC) `RANK`
FROM NOTICE;
-- 3. DENSE_RANK() : 순위를 나타냄 (20등이 3개 일 경우 그 다음 순위는 21등)
SELECT TITLE, WRITER_ID, HIT,
DENSE_RANK() OVER(ORDER BY HIT DESC) `RANK`
FROM NOTICE;
-- 4. PARTITION : 순위를 나타냄 (20등이 3개 일 경우 그 다음 순위는 21등)
SELECT WRITER_ID, TITLE, HIT,
DENSE_RANK() OVER(PARTITION BY WRITER_ID
ORDER BY HIT DESC) `RANK`
FROM NOTICE;
반응형
'🛢 3. Database > 3-1 Mysql' 카테고리의 다른 글
[Database] 16. 비주얼 스튜디오 코드로 쿼리 실행하기 (0) | 2021.09.29 |
---|---|
[Database] 15. 부조회(서브쿼리) (0) | 2021.09.28 |
[Database] 13. DISTINCT와 COUNT, SQL 함수(문자열, 숫자, 날짜, 변환, NULL 관련) (0) | 2021.09.27 |
[Database] 12. 페이징 처리 (0) | 2021.09.27 |
[Database] 11. 정규표현식 (0) | 2021.09.23 |
댓글