Complete SQL Syllabus with Examples (Colored)
CREATE and INSERT Statements
-- TABLE CREATION
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
salary INT,
gender VARCHAR(10),
hire_date DATE
);
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
emp_id INT,
order_date DATE,
order_amount DECIMAL(10, 2)
);
-- DATA INSERTION
INSERT INTO departments VALUES
(101, 'Sales'),
(102, 'HR'),
(103, 'IT'),
(104, 'Finance');
INSERT INTO employees VALUES
(1, 'Alice', 101, 70000, 'Female', '2022-01-10'),
(2, 'Bob', 102, 65000, 'Male', '2021-07-22'),
(3, 'Charlie', 103, 60000, 'Male', '2020-03-15'),
(4, 'Diana', 104, 72000, 'Female', '2019-11-01'),
(5, 'Ethan', 101, 75000, 'Male', '2023-02-17'),
(6, 'Fiona', 103, 68000, 'Female', '2022-06-30');
INSERT INTO orders VALUES
(1001, 1, '2023-04-01', 500.00),
(1002, 1, '2023-04-05', 1200.00),
(1003, 2, '2023-04-07', 700.00),
(1004, 3, '2023-04-09', 950.00),
(1005, 4, '2023-04-11', 1100.00),
(1006, 5, '2023-04-13', 1300.00),
(1007, 5, '2023-04-14', 800.00),
Complete SQL Syllabus with Examples (Colored)
(1008, 6, '2023-04-15', 650.00);
1. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
2. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
3. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
4. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
5. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
6. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
7. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
8. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
9. CTE to count employees per department and filter departments with more than 1 employee
Complete SQL Syllabus with Examples (Colored)
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
10. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
11. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
12. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
13. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
14. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
15. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
16. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
17. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
18. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
Complete SQL Syllabus with Examples (Colored)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
19. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
20. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
21. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
22. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
23. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
24. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
25. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
26. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
27. CTE to get total order amount per employee
Complete SQL Syllabus with Examples (Colored)
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
28. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
29. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
30. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
31. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
32. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
33. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
34. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
35. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
Complete SQL Syllabus with Examples (Colored)
36. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
37. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
38. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
39. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
40. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
41. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
42. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
43. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
44. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
Complete SQL Syllabus with Examples (Colored)
45. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
46. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
47. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
48. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
49. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
50. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
51. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
52. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
53. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
Complete SQL Syllabus with Examples (Colored)
54. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
55. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
56. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
57. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
58. CTE to calculate average salary and list employees above it
WITH avg_salary_cte AS (SELECT AVG(salary) AS avg_salary FROM employees) SELECT * FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary_cte);
59. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
60. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
61. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
62. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
Complete SQL Syllabus with Examples (Colored)
emp_id) SELECT * FROM total_orders;
63. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
64. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
65. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
66. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
67. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
68. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
69. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
70. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
71. CTE to find employees who never placed any order
Complete SQL Syllabus with Examples (Colored)
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
72. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
73. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
74. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
75. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
76. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
77. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
78. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
79. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
Complete SQL Syllabus with Examples (Colored)
80. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
81. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
82. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
83. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
84. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
85. CTE to find employees hired in the last 2 years
WITH recent_hires AS (SELECT * FROM employees WHERE hire_date >= CURRENT_DATE - INTERVAL '2
years') SELECT * FROM recent_hires;
86. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
87. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
88. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
Complete SQL Syllabus with Examples (Colored)
89. CTE to categorize salary into high, medium, low
WITH salary_category AS (SELECT name, salary, CASE WHEN salary > 70000 THEN 'High' WHEN salary
BETWEEN 60000 AND 70000 THEN 'Medium' ELSE 'Low' END AS category FROM employees) SELECT * FROM
salary_category;
90. CTE to count employees per department and filter departments with more than 1 employee
WITH emp_counts AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY
department_id) SELECT * FROM emp_counts WHERE emp_count > 1;
91. CTE to rank orders by amount within each employee
WITH ranked_orders AS (SELECT *, RANK() OVER (PARTITION BY emp_id ORDER BY order_amount DESC) AS
rank_amount FROM orders) SELECT * FROM ranked_orders;
92. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
93. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
94. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
e.department_id = d.department_id;
95. CTE to retrieve latest order per employee using ROW_NUMBER()
WITH ranked_orders AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY order_date DESC)
AS rn FROM orders) SELECT * FROM ranked_orders WHERE rn = 1;
96. CTE to find department-wise salary rank of employees
WITH ranked_salaries AS (SELECT name, department_id, salary, RANK() OVER (PARTITION BY
department_id ORDER BY salary DESC) AS rank_in_dept FROM employees) SELECT * FROM ranked_salaries;
97. CTE to calculate department average and compare each employee's salary
WITH dept_avg AS (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY
department_id) SELECT e.name, e.salary, d.avg_salary FROM employees e JOIN dept_avg d ON
Complete SQL Syllabus with Examples (Colored)
e.department_id = d.department_id;
98. CTE to get total order amount per employee
WITH total_orders AS (SELECT emp_id, SUM(order_amount) AS total_amount FROM orders GROUP BY
emp_id) SELECT * FROM total_orders;
99. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);
100. CTE to find employees who never placed any order
WITH ordered_emps AS (SELECT DISTINCT emp_id FROM orders) SELECT * FROM employees WHERE emp_id NOT
IN (SELECT emp_id FROM ordered_emps);