Skip to content

Commit 8ded6c6

Browse files
committed
completed till GROUPING SETS
1 parent 390a952 commit 8ded6c6

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
/******** 1) GROUP BY **********/
2+
/*
3+
When we group by, we apply the function PER GROUP, NOT on the ENTIRE DATA SET.
4+
Group by use Split, Apply, Combine strategry.
5+
*/
6+
7+
/* How many employees worked in each department ? */
8+
SELECT d.dept_name AS "Department Name" ,COUNT(e.emp_no) AS "Number Of Employee"
9+
FROM employees e
10+
JOIN dept_emp de ON e.emp_no = de.emp_no
11+
JOIN departments d ON d.dept_no = de.dept_no
12+
GROUP BY d.dept_no
13+
ORDER BY 1;
14+
15+
16+
/************ 2) HAVING Keyword *************/
17+
/*
18+
"Having" applies filters to a group as a whole
19+
20+
**** Order of Operations ****
21+
FROM
22+
WHERE
23+
GROUP BY
24+
HAVING
25+
SELECT
26+
ORDER
27+
*/
28+
29+
/* How many employees worked in each department, but with employees more than 25000 ? */
30+
SELECT d.dept_name AS "Department Name" ,COUNT(e.emp_no) AS "Number Of Employee"
31+
FROM employees e
32+
JOIN dept_emp de ON e.emp_no = de.emp_no
33+
JOIN departments d ON d.dept_no = de.dept_no
34+
GROUP BY d.dept_name
35+
HAVING COUNT(e.emp_no) > 25000
36+
ORDER BY 1;
37+
38+
/* How many Female employees worked in each department, but with employees more than 25000 ? */
39+
SELECT d.dept_name AS "Department Name" ,COUNT(e.emp_no) AS "Number Of Employee"
40+
FROM employees e
41+
JOIN dept_emp de ON e.emp_no = de.emp_no
42+
JOIN departments d ON d.dept_no = de.dept_no
43+
WHERE e.gender='F'
44+
GROUP BY d.dept_name
45+
HAVING COUNT(e.emp_no) > 25000
46+
ORDER BY 1;
47+
48+
49+
/********** 3) Ordering Group Data **********/
50+
SELECT d.dept_name AS "Department Name" ,COUNT(e.emp_no) AS "Number Of Employee"
51+
FROM employees e
52+
JOIN dept_emp de ON e.emp_no = de.emp_no
53+
JOIN departments d ON d.dept_no = de.dept_no
54+
GROUP BY d.dept_name
55+
HAVING COUNT(e.emp_no) > 25000
56+
ORDER BY 2 DESC;
57+
58+
59+
/********* 4) Group by Mental Model ***********/
60+
/* What are the 8 employees who got the most salary bumps? */
61+
-- SELECT e.emp_no, CONCAT(e.first_name, e.last_name) AS "Name", s.salary, s.from_date, s.to_date
62+
SELECT emp_no, MAX(from_date)
63+
FROM salaries
64+
GROUP BY emp_no;
65+
66+
/*********** 5) GROUPING SETS**********/
67+
68+
/******* UNION / UNION ALL *********/
69+
/*
70+
SELECT col1, SUM(col2)
71+
FROM table
72+
GROUP BY col1
73+
74+
UNION / UNION ALL
75+
76+
SELECT SUM(col2)
77+
FROM table
78+
79+
80+
UNION ALL doesn't remove DUPLICATE Records.
81+
*/
82+
SELECT NULL AS "prod_id", sum(ol.quantity)
83+
FROM orderlines AS ol
84+
UNION
85+
SELECT prod_id AS "prod_id", sum(ol.quantity)
86+
FROM orderlines AS ol
87+
GROUP BY prod_id
88+
ORDER BY prod_id DESC;
89+
90+
/*********** GROUPING SETS ***********/
91+
/*
92+
A Subclause of GROUP BY that allows you to define multiple grouping
93+
It is very useful when we want to combine multiple grouping
94+
*/
95+
96+
-- same result as using above UNION code
97+
SELECT NULL AS "prod_id", sum(ol.quantity)
98+
FROM orderlines AS ol
99+
GROUP BY
100+
GROUPING SETS(
101+
(),
102+
(prod_id)
103+
)
104+
ORDER BY prod_id DESC;
105+
106+
/* we can add in multiple groups as we need */
107+
SELECT NULL AS "prod_id", orderlineid, sum(ol.quantity)
108+
FROM orderlines AS ol
109+
GROUP BY
110+
GROUPING SETS(
111+
(),
112+
(prod_id),
113+
(orderlineid)
114+
)
115+
ORDER BY prod_id DESC, orderlineid DESC;

0 commit comments

Comments
 (0)