重複しないデータのカウント
動画でも説明したとおり、SQLAlchemy の func モジュールを使うと、カウントや合計といった組み込みの SQL 関数にアクセスでき、処理を高速かつ効率的にできます。
動画では、Jason が census の pop2008 列の合計を求めるために 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で学ぶデータベース入門
演習の手順
censusのstateフィールドにある重複しない値を数えるための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(____)