-- inline view (또는 subquery)
-- inline view 는 SELECT, INSERT, UPDATE, DELETE 문이나 다른 하위 쿼리 내부에 출력된 SELECT 문
-- inline view 식이 허용 되는 모든 위치에서 사용할 수 있으며 단독으로 실행 가능하다.
-- 판매된 책코드, 책이름
SELECT b_id, title
FROM book
WHERE b_id IN (SELECT b_id FROM panmai);
-- WHERE절에서 잘못 사용된 예
SELECT 컬럼1,컬럼2 FROM 테이블1
WHERE 컬럼1=(SELECT 컬럼1, 컬럼2 FROM 테이블2);
-- WHERE 절에 사용한 경우 괄호안의 SELECT문의 컬럼은 하나만 가능
SELECT 컬럼1,컬럼2 FROM 테이블1
WHERE 컬럼1 IN(SELECT 컬럼1, 컬럼2 FROM 테이블2);
-- WHERE 절에 사용한 경우 괄호안의 SELECT문의 컬럼은 하나만 가능
SELECT b_id, title FROM book
WHERE b_id = (SELECT b_id FROM panmai);
-- 서브쿼리는 데이터가 여러가지이다. 이것을 b_id 하나의 데이터와 비교할 수 없으므로 에러
-- 만약 서브쿼리에 데이터가 하나만 있다면 비교할 수 있다.
--WITH : inline 뷰를 미리 블럭으로 정한후 사용(여러번 사용될 경우 간결)
-- 서점별 총판매금액
SELECT to_CHAR(p_date, 'YYYY') 년도,g.g_id, g_name, SUM(price*p_su) amt
FROM gogaek g
JOIN panmai p ON g.g_id= p.g_id
JOIN danga d ON p.b_id = d.b_id
GROUP BY to_char(p_date, 'YYYY'),g.g_id,g_name
ORDER BY 년도;
--년도별 총판매금액 가장많은 서점
WITH year_pan AS( -- 서점별,년도별 총판매금액 쿼리
SELECT to_CHAR(p_date, 'YYYY') 년도,g.g_id, g_name, SUM(price*p_su) amt
FROM gogaek g
JOIN panmai p ON g.g_id= p.g_id
JOIN danga d ON p.b_id = d.b_id
GROUP BY to_char(p_date, 'YYYY'),g.g_id,g_name
ORDER BY 년도
)
SELECT 년도, g_id,g_name, amt FROM( -- 위 쿼리중 년도별 가장 높은 총판금액 서점.
SELECT 년도, g_id, g_name, amt, RANK() OVER(PARTITION BY 년도 ORDER BY amt DESC) 순위
FROM year_pan
) WHERE 순위=1;