1
WITH direktkandidatur_nummeriert(partei, wahlkreis, kandidatur, anzahlstimmen, wk_rang) AS (
2
SELECT dk.partei,
3
dk.wahlkreis,
4
dk.direktid,
5
dk.anzahlstimmen,
6
row_number() OVER (PARTITION BY dk.wahlkreis ORDER BY dk.anzahlstimmen DESC) AS row_number
7
FROM direktkandidatur dk
8
), direktmandat_stimmen(wahl, partei, wahlkreis, kandidatur, anzahlstimmen) AS (
9
SELECT wk.wahl,
10
dkn.partei,
11
wk.wkid,
12
dkn.kandidatur,
13
dkn.anzahlstimmen
14
FROM direktkandidatur_nummeriert dkn,
15
wahlkreis wk
16
WHERE ((dkn.wahlkreis = wk.wkid) AND (dkn.wk_rang = 1))
17
), vorsprung_direktmandat_nummeriert(wahl, sieger_kandidatur, sieger_partei, verlierer_kandidatur, verlierer_partei, abs_stimmen_sieger, abs_stimmen_verlierer, differenz_stimmen, wk_rang) AS (
18
SELECT dm.wahl,
19
dm.kandidatur,
20
dm.partei,
21
dkn.kandidatur,
22
dkn.partei,
23
dm.anzahlstimmen AS abs_stimmen_sieger,
24
dkn.anzahlstimmen AS abs_stimmen_verlierer,
25
(dm.anzahlstimmen - dkn.anzahlstimmen),
26
dkn.wk_rang
27
FROM direktkandidatur_nummeriert dkn,
28
direktmandat_stimmen dm
29
WHERE ((dm.wahlkreis = dkn.wahlkreis) AND (dm.partei <> dkn.partei))
30
), siege_nummeriert AS (
31
SELECT vdn.wahl,
32
vdn.sieger_kandidatur,
33
vdn.sieger_partei,
34
vdn.verlierer_kandidatur,
35
vdn.verlierer_partei,
36
vdn.abs_stimmen_sieger,
37
vdn.abs_stimmen_verlierer,
38
vdn.differenz_stimmen,
39
vdn.wk_rang,
40
row_number() OVER (PARTITION BY vdn.wahl, vdn.sieger_partei ORDER BY vdn.differenz_stimmen) AS knappheit_rang
41
FROM vorsprung_direktmandat_nummeriert vdn
42
WHERE (vdn.wk_rang = 2)
43
), kleinster_vorsprung_partei(wahl, sieger_kandidatur, sieger_partei, verlierer_kandidatur, verlierer_partei, abs_stimmen_sieger, abs_stimmen_verlierer, differenz_stimmen, wk_rang, knappheit_rang) AS (
44
SELECT sn.wahl,
45
sn.sieger_kandidatur,
46
sn.sieger_partei,
47
sn.verlierer_kandidatur,
48
sn.verlierer_partei,
49
sn.abs_stimmen_sieger,
50
sn.abs_stimmen_verlierer,
51
sn.differenz_stimmen,
52
sn.wk_rang,
53
sn.knappheit_rang
54
FROM siege_nummeriert sn
55
WHERE (sn.knappheit_rang <= 10)
56
), niederlagen_nummeriert AS (
57
SELECT vdn.wahl,
58
vdn.sieger_kandidatur,
59
vdn.sieger_partei,
60
vdn.verlierer_kandidatur,
61
vdn.verlierer_partei,
62
vdn.abs_stimmen_sieger,
63
vdn.abs_stimmen_verlierer,
64
vdn.differenz_stimmen,
65
vdn.wk_rang,
66
row_number() OVER (PARTITION BY vdn.wahl, vdn.verlierer_partei ORDER BY vdn.differenz_stimmen) AS knappheit_rang
67
FROM vorsprung_direktmandat_nummeriert vdn
68
), kleinster_rueckstand_partei(wahl, sieger_kandidatur, sieger_partei, verlierer_kandidatur, verlierer_partei, abs_stimmen_sieger, abs_stimmen_verlierer, differenz_stimmen, wk_rang, knappheit_rang) AS (
69
SELECT sn.wahl,
70
sn.sieger_kandidatur,
71
sn.sieger_partei,
72
sn.verlierer_kandidatur,
73
sn.verlierer_partei,
74
sn.abs_stimmen_sieger,
75
sn.abs_stimmen_verlierer,
76
sn.differenz_stimmen,
77
sn.wk_rang,
78
sn.knappheit_rang
79
FROM niederlagen_nummeriert sn
80
WHERE (sn.knappheit_rang <= 10)
81
), partei_ohne_direktmandat(wahl, partei) AS (
82
SELECT btw.nummer,
83
p.parteiid
84
FROM bundestagswahl btw,
85
partei p
86
WHERE (NOT p.ist_einzelbewerbung)
87
EXCEPT
88
SELECT DISTINCT dm.wahl,
89
dm.partei
90
FROM direktmandat_stimmen dm
91
)
92
SELECT true AS is_sieg,
93
kvp.wahl,
94
wk.nummer AS wk_nummer,
95
wk.name AS wk_name,
96
sp.kuerzel AS sieger_partei,
97
vp.kuerzel AS verlierer_partei,
98
kvp.abs_stimmen_sieger,
99
kvp.abs_stimmen_verlierer,
100
kvp.differenz_stimmen
101
FROM kleinster_vorsprung_partei kvp,
102
partei sp,
103
partei vp,
104
direktkandidatur dk,
105
wahlkreis wk
106
WHERE ((kvp.sieger_partei = sp.parteiid) AND (kvp.verlierer_partei = vp.parteiid) AND (kvp.sieger_kandidatur = dk.direktid) AND (dk.wahlkreis = wk.wkid))
107
UNION
108
SELECT false AS is_sieg,
109
krp.wahl,
110
wk.nummer AS wk_nummer,
111
wk.name AS wk_name,
112
sp.kuerzel AS sieger_partei,
113
vp.kuerzel AS verlierer_partei,
114
krp.abs_stimmen_sieger,
115
krp.abs_stimmen_verlierer,
116
krp.differenz_stimmen
117
FROM kleinster_rueckstand_partei krp,
118
partei sp,
119
partei_ohne_direktmandat pod,
120
partei vp,
121
direktkandidatur dk,
122
wahlkreis wk
123
WHERE ((krp.sieger_partei = sp.parteiid) AND (krp.verlierer_partei = pod.partei) AND (pod.partei = vp.parteiid) AND (krp.sieger_kandidatur = dk.direktid) AND (dk.wahlkreis = wk.wkid));