-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchapter-16.sql
More file actions
73 lines (67 loc) · 1.93 KB
/
chapter-16.sql
File metadata and controls
73 lines (67 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-- chapter 14: analytical functions (windows functions)
use sakila;
SELECT quarter(payment_date) quarter,
monthname(payment_date) month_nm,
sum(amount) monthly_sales
FROM payment
WHERE year(payment_date) = 2005
GROUP BY quarter, month_nm;
SELECT QUARTER(payment_date) quarter,
MONTHNAME(payment_date) month_nm,
SUM(amount) monthly_sales,
MAX(SUM(amount))
OVER () max_overall_sales,
MAX(SUM(amount))
OVER (PARTITION BY QUARTER(payment_date)) max_quarter_sales
FROM payment
WHERE year(payment_date) = 2005
GROUP BY QUARTER(payment_date), MONTHNAME(payment_date);
-- rank in the whole result set, which is our `window` in this case
-- (since the OVER clause does not contain a PARTITION BY clause)
SELECT
QUARTER(payment_date) quarter,
MONTHNAME(payment_date) month_nm,
SUM(amount) monthly_sales,
RANK() OVER(ORDER BY SUM(amount) DESC) sales_rank
FROM payment
WHERE YEAR(payment_date) = 2005
GROUP BY quarter, month_nm
ORDER BY quarter, month_nm;
SELECT
QUARTER(payment_date) quarter,
MONTHNAME(payment_date) month_nm,
SUM(amount) monthly_sales,
RANK() OVER(
PARTITION BY QUARTER(payment_date)
ORDER BY SUM(amount) DESC
) qtr_sales_rank
FROM payment
WHERE YEAR(payment_date) = 2005
GROUP BY quarter, month_nm
ORDER BY quarter, month_nm;
-- row number
SELECT
QUARTER(payment_date) quarter,
MONTHNAME(payment_date) month_nm,
SUM(amount) monthly_sales,
ROW_NUMBER() OVER(
PARTITION BY QUARTER(payment_date)
ORDER BY SUM(amount) DESC
) qtr_sales_row_number
FROM payment
WHERE YEAR(payment_date) = 2005
GROUP BY quarter, month_nm
ORDER BY quarter, month_nm;
-- DENSE RANK
SELECT
QUARTER(payment_date) quarter,
MONTHNAME(payment_date) month_nm,
SUM(amount) monthly_sales,
DENSE_RANK() OVER(
PARTITION BY QUARTER(payment_date)
ORDER BY SUM(amount) DESC
) qtr_sales_dense_rank
FROM payment
WHERE YEAR(payment_date) = 2005
GROUP BY quarter, month_nm
ORDER BY quarter, month_nm;