SQL -3

원종서·2021년 10월 11일
0
INSERT INTO NOTICE(ID,REGDATE,HIT,WRITER_ID) VALUES(8,SYSDATE, 3 ,'Anon')

집계함수와 Group By

집계함수

SELECT COUNT(ID) FROM NOICE;
  • 집계함수는 null 값은 포함하지 않기 때문에 PK로 하는 것이 좋다.
  • 특정 작성자가 작성한 게시글 찾기
SELECT WRITER_ID, COUNT(ID) AS COUNT FROM NOTICE GROUP BY WIRTER_ID

SQL 문 실행순서

FROM -> CONNECT BY -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

-회원 별 게시글 수를 조회, 단 게시글이 두개 이하인 레코드만 출력

GROUP BY에 조건을 쓰기 위해선 HAVING을 사용해야하다 (WHERE 안됨)

SELECT WRITER_ID, COUNT(N.ID) FROM NOTICE N 
GROUP BY WRITER_ID
HAVING COUNT(N.ID) >= 2

함수

ROW_NUMBER

SELECT ROW_NUMBER() OVER (ORDER BY HIT), ID, TITLE , WRITER_ID, REGDATE, HIT FROM NOTICE;

hit로 정렬 한 후 오름차순으로 정렬된 숫자 컬럼을 보여줌

RANK

SELECT RANK() OVER (ORDER BY HIT), ID, TITLE, WRITER_ID ,REGDATE, HIT FROM NOTICE

HIT순서대로 정렬된 등수 컬럼을 표시함. (중복값 있음)

DENSE_RANK


SELECT RANK() OVER (ORDER BY HIT), ID, TITLE, WRITER_ID ,REGDATE, HIT FROM NOTICE

HIT순서대로 정렬된 등수 컬럼을 표시함. (중복값 있음)
-> 1 2 3 4 4 6 7 7 4등 2이니 다음은 6등

부조회(서브쿼리)

논리 실행 순세어 맞지 않는 쿼리를 할때는 서브쿼리를 이용한다.
원하는 것을 먼저 찾고(정렬된 결과) 그 결과를 순위별로 출력함

  • 평균나이 이상인 회원 목록 조회
SELECT * FROM MEMBER WHERE AGE >= (SELECT AVG(AGE) FROM MEMBER)

0개의 댓글