-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path11_Case_Statements.sql
More file actions
67 lines (53 loc) · 1.61 KB
/
11_Case_Statements.sql
File metadata and controls
67 lines (53 loc) · 1.61 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
-- Case Statements
-- IF()
-- IF(source_column_name [=,>,<,...] conditional_statement, value_to_assign, other_value_to_assign)
-- if you want it to return a true or false (1, 0) boolean value, do this:
SELECT dept_name, dept_name='research'
FROM departments;
SELECT dept_name, IF(dept_name = 'research', true, false)
FROM departments;
-- if you want it to return one of 2 values based on single condition, use IF()
SELECT dept_name, IF(dept_name = 'research', 'true', 'false')
FROM departments;
-- if you need multiple "if elif elif .... " please use CASE statements
-- Case Statements
-- OPTION 1: CASE col WHEN...
SELECT col1,
CASE source_column_name
WHEN conditional_statement
THEN value_to_assign
ELSE other_value_to_assign
END AS new_column_name
FROM table1
;
SELECT dept_name,
CASE dept_name
WHEN 'Research' THEN 'Development'
WHEN 'Marketing' THEN 'Sales'
ELSE dept_name
END AS dept_group
FROM departments;
-- OPTION2: CASE WHEN col
-- allows for differnet columns to be compared and for different comparison operators.
SELECT count(distinct(CASE
WHEN dept_name IN ('research', 'development') THEN 'R&D'
WHEN dept_name IN ('sales', 'marketing') THEN 'sales&marketing'
WHEN dept_name IN ('production', 'quality management') THEN 'prod&QM'
ELSE dept_name
END))
AS dept_group
FROM departments;
-- >, <, >=, <=, !=, BETWEEN, LIKE
SELECT sum(CASE
WHEN gender = 'F' THEN 1
ELSE 0
END) AS is_female
FROM employees;
SELECT SUM(CASE
WHEN birth_date < "1964" THEN 0
WHEN gender = 'F' THEN 1
ELSE 0
END)
AS GENX_females
FROM employees
;