Výpočet celkového podílu žen
V rámci jednoho příkazu select je možné kombinovat funkce i operátory.
Taková kombinace se hodí zejména při výpočtu procent nebo průměrů. K práci s daty splňujícími konkrétní podmínky — aniž by to ovlivnilo celý dotaz — můžeš využít výraz case().
Výraz case() přijímá seznam podmínek a sloupec, který se vrátí při splnění dané podmínky, a dále else_ pro případ, kdy žádná z podmínek splněna není. Celý tento výraz pak můžeš obalit libovolnou funkcí nebo matematickou operací.
Při dělení celých čísel často potřebuješ získat výsledek jako desetinné číslo. Některé databáze to sice dělají automaticky, ale vždy můžeš použít funkci cast(), která převede výraz na požadovaný datový typ.
Toto cvičení je součástí kurzu
Introduction to Databases in Python
Pokyny k cvičení
- Importuj
case,castaFloatzsqlalchemy. - Sestav výraz
female_pop2000pro výpočet počtu žen v roce 2000. Postupuj takto:- Použij
case()uvnitřfunc.sum(). - Prvním argumentem
case()je seznam obsahující n-tici s:- i) Logickou podmínkou ověřující, že
census.columns.sexse rovná'F'. - ii) Sloupcem
census.columns.pop2000.
- i) Logickou podmínkou ověřující, že
- Druhým argumentem je podmínka
else_, kterou nastav na 0.
- Použij
- Vypočítej celkový počet obyvatel v roce 2000 a pomocí
cast()ho převeď na typFloat. - Sestav dotaz pro výpočet podílu žen v roce 2000: vyděl
female_pop2000hodnotoutotal_pop2000a výsledek vynásob100. - Dotaz spusť a vypiš
percent_female.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# import case, cast and Float from sqlalchemy
from sqlalchemy import ____, ____, ____
# Build an expression to calculate female population in 2000
female_pop2000 = func.sum(
____([
(____ == ____, ____)
], else_=____))
# Cast an expression to calculate total population in 2000 to Float
total_pop2000 = cast(func.sum(____), ____)
# Build a query to calculate the percentage of women in 2000: stmt
stmt = select([____ / ____* 100])
# Execute the query and store the scalar result: percent_female
percent_female = connection.execute(____).scalar()
# Print the percentage
print(____)