州ごとの人口合計を求める
count_1 のようなクエリ結果の列名で混乱しないよう、.label() メソッドで結果列に名前を付けられます。これは使用する関数メソッドに続けて指定し、引数に付けたい名前を渡します。
func.sum() と .group_by() を組み合わせることで、State ごとの人口合計を取得し、さらに label() メソッドで出力列に名前を付けられます。
また、select 文で使う前に func.sum() の式を先に作成することもできます。select 文の中で書くのと同じ要領で式を作って変数に保存し、その変数を本来 func.sum() を書く位置で使用します。
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
sqlalchemyからfuncをインポートします。pop2008フィールドの値の合計を計算し、'population'というラベルを付ける式を作成します。stateフィールドの値と、pop2008の合計を取得するための select 文を作成します。.group_by()メソッドを使って、文をstateでグループ化します。connectionを使ってstmtを実行し、結果をresultsに保存します。results[0].keys()を使って返された結果のキー/列名を出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import func
____
# Build an expression to calculate the sum of pop2008 labeled as population
pop2008_sum = func.sum(____).label(____)
# Build a query to select the state and sum of pop2008: stmt
stmt = select([____, ____])
# Group stmt by state
stmt = stmt.group_by(____)
# Execute the statement and store all the records: results
results = connection.execute(____).fetchall()
# Print results
print(results)
# Print the keys/column names of the results returned
print(____)