女性の全体割合を求める
単一の SELECT ステートメント内で、関数や演算子を組み合わせることも可能です。
この組み合わせは、割合や平均を計算したいときに非常に便利です。また、case() 式を使えば、特定の条件を満たすデータに対してのみ処理を行い、クエリ全体には影響を与えないようにできます。
case() 式は、一致させたい条件のリストと、その条件が一致した場合に返す列を受け取り、どの条件にも一致しなかった場合の else_ を続けます。この式全体は、任意の関数や数式で包むことができます。
整数同士の除算を行うとき、結果を小数で受け取りたい場面はよくあります。データベースによっては自動で行われますが、cast() 関数を使って、式を特定の型に変換できます。
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
sqlalchemyからcase、cast、Floatをインポートします。- 2000 年の女性人口を計算する式
female_pop2000を作成します。次のように進めます。func.sum()の中でcase()を使います。case()の第 1 引数は、次のタプルを含むリストにします。- i)
census.columns.sexが'F'に等しいかを確認するブール式。 - ii) 列
census.columns.pop2000。
- i)
- 第 2 引数は
else_条件で、0 に設定します。
- 2000 年の総人口を計算し、
cast()を使ってFloatに変換します。 - 2000 年の女性の割合を計算するクエリを作成します。
female_pop2000をtotal_pop2000で割り、100 を掛けます。 - クエリを実行し、
percent_femaleを出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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(____)