2つの列の差を計算する
クエリの一部として数値演算が必要になることはよくあります。例えば、2000年から2008年までの人口の変化を計算したい場合です。数値に対する演算では、SQLAlchemy の演算子は Python と同じように動作します。
これらの演算子を使って、加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)を実行できます。注意: 非数値の列型に対しては挙動が異なります。
それでは、2000年から2008年の間の人口増加で上位5つの州を見つけてみましょう。
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
stmtという名前の select 文を定義し、次を返すようにします。- i)
censusテーブルの州の列(census.columns.state)。 - ii) 2008年(
census.columns.pop2008)と2000年(census.columns.pop2000)の人口の差を'pop_change'というラベルで返すこと。
- i)
- ステートメントを
census.columns.stateで GROUP BY します。 - 人口の変化量(
'pop_change')で降順に並べ替えます。desc('pop_change')を渡してください。 - 直前のステートメントに対して
.limit()メソッドを使い、返すレコードを5件のみにします。 - ステートメントを実行して、
fetchall()でレコードを取得します。 - print 文はすでに用意されています。結果を見るには 「回答を送信」 してください!
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Build query to return state names by population difference from 2008 to 2000: stmt
stmt = select([____, (____-____).label(____)])
# Append group by for the state: stmt_grouped
stmt_grouped = stmt.group_by(____)
# Append order by for pop_change descendingly: stmt_ordered
stmt_ordered = stmt_grouped.order_by(____)
# Return only 5 results: stmt_top5
stmt_top5 = ____
# Use connection to execute stmt_top5 and fetch all results
results = connection.execute(____).fetchall()
# Print the state and population change for each record
for result in results:
print('{}:{}'.format(result.state, result.pop_change))