18 SUQUERY in SELECT Clause
18 SUQUERY in SELECT Clause
Exercises
FROM employees
ORDER BY first_name
EXERCISE Write a query that returns all of those employees that work in the kids division AND
The dates at which those employees were hired are greater than all of the hired_dates of employees
who
--20
USING SUBQUERIES INSTEAD OF COLUMNS creates more flexibility, specially when data is deleted
Outlier
FROM employees
SELECT MAX(salary)
FROM employees
FROM employees
FROM employees
--19
WHERE region_id > ALL(SELECT region_id FROM regions WHERE country='United States' )
--CHALLENGE
FROM employees
AND hire_date > ALL (SELECT hire_date FROM employees WHERE department='Maintenance')
--1st way
FROM employees
--WHERE count = 1
GROUP BY salary
LIMIT 1) a
-2nd way
GROUP BY salary
HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM employees GROUP BY salary)
LIMIT 1
--20
--a
SELECT *
FROM dupes
WHERE id IN(
SELECT min(id)
FROM dupes
GROUP BY name
ORDER BY min(id)
DELETE
FROM dupes
SELECT min(id)
FROM dupes
ORDER BY min(id)
--b
SELECT ROUND(AVG(salary))
FROM employees
WHERE salary NOT IN ((SELECT MIN(salary) FROM employees), (SELECT MAX(salary) FROM employees))
--20 CASE
CASE
WHEN salary > 100000 AND salary < 160000 THEN 'PAID WELL'
ELSE 'UNPAID'
END as total
FROM employees
GROUP BY total
TRANSPOSING DATA
--22 Show the name of the highest employee in another column
CASE
WHEN salary > 100000 AND salary < 160000 THEN 'PAID WELL'
ELSE 'UNPAID'
END as total
FROM employees
GROUP BY total
SELECT *
FROM employees
--20
--1
SELECT SUM (CASE WHEN department = 'Sports' THEN 1 ELSE 0 END) as sports_employees,
FROM employees
--2
SELECT first_name,
CASE WHEN region_id = '1' THEN(SELECT country FROM regions WHERE region_id=1) END region_1,
CASE WHEN region_id = '2' THEN(SELECT country FROM regions WHERE region_id=2) END region_2,
CASE WHEN region_id = '3' THEN(SELECT country FROM regions WHERE region_id=3) END region_3,
CASE WHEN region_id = '4' THEN(SELECT country FROM regions WHERE region_id=4) END region_4,
CASE WHEN region_id = '5' THEN(SELECT country FROM regions WHERE region_id=5) END region_5,
CASE WHEN region_id = '6' THEN(SELECT country FROM regions WHERE region_id=6) END region_6,
CASE WHEN region_id = '7' THEN(SELECT country FROM regions WHERE region_id=7) END region_7
FROM employees
--3
FROM
(SELECT
CASE WHEN region_id = '1' THEN(SELECT country FROM regions WHERE region_id=1) END region_1,
CASE WHEN region_id = '2' THEN(SELECT country FROM regions WHERE region_id=2) END region_2,
CASE WHEN region_id = '3' THEN(SELECT country FROM regions WHERE region_id=3) END region_3,
CASE WHEN region_id = '4' THEN(SELECT country FROM regions WHERE region_id=4) END region_4,
CASE WHEN region_id = '5' THEN(SELECT country FROM regions WHERE region_id=5) END region_5,
CASE WHEN region_id = '6' THEN(SELECT country FROM regions WHERE region_id=6) END region_6,
CASE WHEN region_id = '7' THEN(SELECT country FROM regions WHERE region_id=7) END region_7
FROM employees)a
SELECT *
FROM regions
--23
--a
SELECT department,
(SELECT count(department)
FROM employees e1
GROUP BY department
LIMIT 14
--b -- 2 subqueries
FROM departments d
FROM employees e2
FROM employees
ORDER BY salary desc
23-
27-
Sources of data
GROUP BY country
ORDER BY count(first_name)
FROM employees
GROUP BY department
FROM (SELECT *
SELECT *
Select * from
v_employee_ information – is not a table, and cannot be altered
INLINE VIEW
SELECT *
--27
SELECT department
FROM employees
EXCEPT --takes the first set and removes the ones coinciding in the second one
--UNION --automatically eliminates duplicates , UNION ALL does not eliminate duplicates , columns must
match(same data type)
SELECT department
FROM departments
--27
FROM departments
EXCEPT --takes the first set and removes the ones coinciding in the second one --MINUS is used in others
db
--UNION --automatically eliminates duplicates , UNION ALL does not eliminate duplicates , columns must
match(same data type)
FROM employees
UNION
SELECT country
FROM regions
FROM employees
GROUP BY department
UNION ALL
FROM employees
--30
SELECT first_name, department,
region_id,
FROM employees e2
FROM employees
WHERE region_id = 3
--tabulated row , unbounded = preceding salary, data frame , added to a frame of reference
FROM employees
FROM employees
--adjecent salaries
SUM (salary) OVER(ORDER BY hire_date ROWS BETWEEN 1000 PRECEDING AND CURRENT ROW) --total
of all employees
FROM EMPLOYEES
SELECT SUM(salary) from employees
FROM employees
FROM employees
FROM employees
FROM employees