WITH
WITH <사용이름> AS
UNBOUNDED PRECEDING
UNBOUNDED FOLLOWING
UNBOUNDED CURRENT
윈도우 함수 종류
AVG, COUNT, FIRST_VALUE, LAST_VALUE, MAX, MIN, STDDEV, SUM..D
WINDOW 함수
분석함수, 순위함수라 명하기도 함
행 그룹의 값을 비교, 연산, 정의하여 각 행마다 하나의 결과 반환
행 그룹에 대해 하나의 결과를 반환하는 집계함수와는 다름
OVER
절 포함
SQL의 윈도우 함수란 행과 행 간을 비교, 연산, 정의하기 위한 함수이다. 분석함수 또는 순위함수라고 하기도 한다. 다른 함수들처럼 중첩해서 사용할 수는 없지만 서브쿼리에서는 사용가능하다.
SELECT * REPLACE
WITH orders AS
(SELECT 5 as order_id,
"sprocket" as item_name,
200 as quantity)
SELECT * REPLACE ("widget" AS item_name)
FROM orders;
+----------+-----------+----------+
| order_id | item_name | quantity |
+----------+-----------+----------+
| 5 | widget | 200 |
+----------+-----------+----------+
WITH orders AS
(SELECT 5 as order_id,
"sprocket" as item_name,
200 as quantity)
SELECT * REPLACE (quantity/2 AS quantity)
FROM orders;
+----------+-----------+----------+
| order_id | item_name | quantity |
+----------+-----------+----------+
| 5 | sprocket | 100 |
+----------+-----------+----------+
FROM 절 FOR
JOIN ON / USING
FROM A JOIN B ON A.x = B.x
FROM A JOIN B USING (x)
Table A Table B Result ON Result USING
+---+ +---+ +-------+ +---+
| x | * | x | = | x | x | | x |
+---+ +---+ +-------+ +---+
| 1 | | 2 | | 2 | 2 | | 2 |
| 2 | | 3 | | 3 | 3 | | 3 |
| 3 | | 4 | +-------+ +---+
+---+ +---+
FROM ( A JOIN (B JOIN C USING (x)) USING (x) )
GROUP BY ROLLUP()
ROLLUP()
구문SELECT a, b, SUM(c) FROM Input GROUP BY ROLLUP(a, b);
인 경우 (a,b), (b), ()의 GROUP BY 결과가 포함됨HAVING
GROUP BY
또는 집계 함수로 생성된 결과를 필터링 할 때 HAVING
이 사용됨ORDER BY
ASC
, DESC
를 원하면 ORDER BY x DESC
와 같이 넣어야 함 ASC
인 경우 NULL이 맨 앞으로 나오기 때문에 NULL을 뒤로 빼고싶다면 ORDER BY x NULLS LAST를 지정해야 함 QUALIFY
SELECT item
FROM Produce
WHERE Produce.category = 'vegetable'
QUALIFY RANK() OVER (PARTITION BY category ORDER BY purchases DESC) <= 3
WINDOW
WINDOW
절은 명명된 윈도우 목록을 정의함UNION
, INTERSECT
, EXCEPT
WITH
WITH
절에는 하나 이상의 CTE(공통 테이블 표현식)가 포함됨