始める無料で始める

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' というラベルで返すこと。
  • ステートメントを 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))
コードを編集して実行