-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SQL cvičení: podobnost lokálních a celostátních výsledků #225
Comments
A pro prezidentské volby (první kolo, po obcích) with hlasy_okrsky as (
SELECT
datum, okres, obec, okrsek,
generate_series(1, array_length(hlasy, 1)) ckand,
unnest(hlasy) hlasu_kand,
pl_hl_celk as hlasu_okrsek
FROM
volby.prezident_okrsky
WHERE kolo = 1 -- prvni kolo
), hlasy_obce as (
SELECT
datum, okres, obec, ckand,
sum(hlasu_kand) hlasu_kand,
sum(hlasu_okrsek) hlasu_obec
FROM hlasy_okrsky
GROUP BY 1, 2, 3, 4
), republika as (
SELECT
datum, ckand,
sum(hlasy_k1) hlasu_k1,
sum(hlasy_k2) hlasu_k2,
sum(hlc.hlasy_vsichni_k1) hlasy_vsichni_k1,
sum(hlc.hlasy_vsichni_k2) hlasy_vsichni_k2
FROM
volby.prezident_kandidati
INNER JOIN (select datum, sum(hlasy_k1) hlasy_vsichni_k1, sum(hlasy_k2) hlasy_vsichni_k2 from volby.prezident_kandidati group by 1) hlc USING(datum)
GROUP BY
1, 2
), dohromady as (
SELECT *
FROM hlasy_obce
INNER JOIN republika USING(datum, ckand)
LEFT JOIN volby.prezident_obce USING(datum, okres, obec)
WHERE datum = '2023-01-13' -- datum
)
SELECT
datum, okres, obec, nazevobce as nazev_obce,
max(hlasu_obec) hlasu_obec,
sum(pow(hlasu_kand::numeric/hlasu_obec - hlasu_k1::numeric/hlasy_vsichni_k1, 2))::numeric(10, 8) rss
FROM dohromady
GROUP BY 1, 2, 3, 4
ORDER BY 6 asc
LIMIT 10000 případně napříč všema volbama (pro porovnání vývoje obce) with hlasy_okrsky as (
SELECT
datum, okres, obec, okrsek,
generate_series(1, array_length(hlasy, 1)) ckand,
unnest(hlasy) hlasu_kand,
pl_hl_celk as hlasu_okrsek
FROM
volby.prezident_okrsky
WHERE kolo = 1 -- prvni kolo
), hlasy_obce as (
SELECT
datum, okres, obec, ckand,
sum(hlasu_kand) hlasu_kand,
sum(hlasu_okrsek) hlasu_obec
FROM hlasy_okrsky
GROUP BY 1, 2, 3, 4
), republika as (
SELECT
datum, ckand,
sum(hlasy_k1) hlasu_k1,
sum(hlasy_k2) hlasu_k2,
sum(hlc.hlasy_vsichni_k1) hlasy_vsichni_k1,
sum(hlc.hlasy_vsichni_k2) hlasy_vsichni_k2
FROM
volby.prezident_kandidati
INNER JOIN (select datum, sum(hlasy_k1) hlasy_vsichni_k1, sum(hlasy_k2) hlasy_vsichni_k2 from volby.prezident_kandidati group by 1) hlc USING(datum)
GROUP BY
1, 2
), dohromady as (
SELECT *
FROM hlasy_obce
INNER JOIN republika USING(datum, ckand)
LEFT JOIN volby.prezident_obce USING(datum, okres, obec)
), rss as (
SELECT
datum, okres, obec, nazevobce as nazev_obce,
max(hlasu_obec) hlasu_obec,
sum(pow(hlasu_kand::numeric/hlasu_obec - hlasu_k1::numeric/hlasy_vsichni_k1, 2))::numeric(10, 8) rss
FROM dohromady
GROUP BY 1, 2, 3, 4
)
select
*,
row_number() over(partition by datum order by rss asc) poradi
from rss tenhle druhej dotaz je pekelně pomalej (asi kvůli tomu row_number nad vším) |
a ještě prezidentský po okresech with hlasy_okrsky as (
SELECT
datum, okres, obec, okrsek,
generate_series(1, array_length(hlasy, 1)) ckand,
unnest(hlasy) hlasu_kand,
pl_hl_celk as hlasu_okrsek
FROM
volby.prezident_okrsky
WHERE kolo = 1 -- prvni kolo
), hlasy_obce as (
SELECT
datum, okres, obec, ckand,
sum(hlasu_kand) hlasu_kand,
sum(hlasu_okrsek) hlasu_obec
FROM hlasy_okrsky
GROUP BY 1, 2, 3, 4
), hlasy_okresy as (
SELECT
datum, okres, ckand,
sum(hlasu_kand) hlasu_kand,
sum(hlasu_okrsek) hlasu_okres
FROM hlasy_okrsky
GROUP BY 1, 2, 3
), republika as (
SELECT
datum, ckand,
sum(hlasy_k1) hlasu_k1,
sum(hlasy_k2) hlasu_k2,
sum(hlc.hlasy_vsichni_k1) hlasy_vsichni_k1,
sum(hlc.hlasy_vsichni_k2) hlasy_vsichni_k2
FROM
volby.prezident_kandidati
INNER JOIN (select datum, sum(hlasy_k1) hlasy_vsichni_k1, sum(hlasy_k2) hlasy_vsichni_k2 from volby.prezident_kandidati group by 1) hlc USING(datum)
GROUP BY
1, 2
), dohromady as (
SELECT republika.*, hlasy_okresy.okres, hlasy_okresy.ckand, hlasy_okresy.hlasu_kand, hlasy_okresy.hlasu_okres, nuts.nazev
FROM hlasy_okresy
INNER JOIN republika USING(datum, ckand)
INNER JOIN volby.prezident_nuts nuts on nuts.datum = hlasy_okresy.datum and nuts.num_nuts = hlasy_okresy.okres
), rss as (
SELECT
datum, okres, nazev,
max(hlasu_okres) hlasu_okres,
sum(pow(hlasu_kand::numeric/hlasu_okres - hlasu_k1::numeric/hlasy_vsichni_k1, 2))::numeric(10, 8) rss
FROM dohromady
GROUP BY 1, 2, 3
ORDER BY 5 asc
)
select
*,
row_number() over(partition by datum order by rss asc) poradi
from rss |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
napric vsema volbama
The text was updated successfully, but these errors were encountered: