始める無料で始める

重複しないデータのカウント

動画でも説明したとおり、SQLAlchemy の func モジュールを使うと、カウントや合計といった組み込みの SQL 関数にアクセスでき、処理を高速かつ効率的にできます。

動画では、Jason が censuspop2008 列の合計を求めるために func.sum() を使いました。次のとおりです。

select([func.sum(census.columns.pop2008)])

代わりに、pop2008 の値の数を数えるには、次のように func.count() を使えます。

select([func.count(census.columns.pop2008)])

さらに、pop2008重複しない値だけを数えたい場合は、.distinct() メソッドを使います。

select([func.count(census.columns.pop2008.distinct())])

この演習では、func.count().distinct() を使って、census に含まれる重複しない州の数を数える練習をします。

ここまでで、結果を取得するために ResultProxy に対して .fetchall().fetchmany().first() を使う方法を見てきました。ResultProxy には、1 行 1 列のみを返すクエリの値だけを取得するための .scalar() というメソッドもあります。

これは、カウントや合計だけを問い合わせる場合にとても便利です。

この演習はコースの一部です

Pythonで学ぶデータベース入門

コースを見る

演習の手順

  • censusstate フィールドにある重複しない値を数えるための select 文を作成します。
  • stmt を実行してカウントを取得し、結果を distinct_state_count に保存します。
  • distinct_state_count の値を表示してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Build a query to count the distinct states values: stmt
stmt = select([____])

# Execute the query and store the scalar result: distinct_state_count
distinct_state_count = connection.execute(____).scalar()

# Print the distinct_state_count
print(____)
コードを編集して実行