-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsample2.sql
More file actions
86 lines (80 loc) · 2 KB
/
sample2.sql
File metadata and controls
86 lines (80 loc) · 2 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
74
75
76
77
78
79
80
81
82
83
84
85
86
-- data read.mdのリンクの/* クロス表で入れ子の表側を作る */
-- goal
-- age_range | sex | 東北 | 関東
-- -----------+-----+------+------
-- 21~30歳 | 男 | 1100 | 1800
-- 21~30歳 | 女 | 1300 | 2500
-- 31~40歳 | 男 | |
-- 31~40歳 | 女 | |
-- 41~50歳 | 男 | 1000 |
-- 41~50歳 | 女 | 1800 | 2100
-- step1 年齢と性別だけのテーブル
SELECT
t1.*
FROM
(
SELECT
age.*,
sex.*
FROM
tblage age,
tblsex sex
) t1
ORDER BY
t1.age_class ASC
-- step2-1 地区カラムの作成
SELECT
pop.*,
CASE
WHEN pop.pref_name IN('秋田', '青森') THEN pop.population
ELSE NULL
END as 東北,
CASE
WHEN pop.pref_name IN('千葉', '東京') THEN pop.population
ELSE NULL
END as 関東
FROM
tblpop pop
-- step2-2 年齢ごと、性別ごとの人口集計
SELECT
pop.age_class,
pop.sex_cd,
SUM(CASE WHEN pop.pref_name IN('秋田', '青森') THEN pop.population ELSE NULL END) as 東北,
SUM(CASE WHEN pop.pref_name IN('千葉', '東京') THEN pop.population ELSE NULL END) as 関東
FROM
tblpop pop
GROUP BY
pop.age_class,
pop.sex_cd
-- ゴール
SELECT
t1.age_range,
t1.sex,
pop2.東北,
pop2.関東
FROM
(
SELECT
age.*,
sex.*
FROM
tblage age,
tblsex sex
) t1
LEFT JOIN
(
SELECT
pop.age_class,
pop.sex_cd,
SUM(CASE WHEN pop.pref_name IN('秋田', '青森') THEN pop.population ELSE NULL END) as 東北,
SUM(CASE WHEN pop.pref_name IN('千葉', '東京') THEN pop.population ELSE NULL END) as 関東
FROM
tblpop pop
GROUP BY
pop.age_class,
pop.sex_cd
) pop2
ON t1.age_class = pop2.age_class
AND t1.sex_cd = pop2.sex_cd
ORDER BY
t1.age_class ASC