SQLにおいて表題の件。自身はAthenaでとても重宝した。条件に合致した中での一意な数を取得したい。
■ 環境
- Amazon Athena
■ count(distinct)
Athenaを利用しているので、読み込むデータ量も減らしたいしクエリを実行する対象は減らしたい。なので1回のクエリ実行で必要な情報を得たい。複数の条件で`count()`を取得したいが、これは以前のエントリで述べた通り。今回はさらに条件を絞った状態で`distinct`の値を取得したかった。
SELECT
regist_date,
count(1) as total,
count(column1 < 10 or null) as count1, count(column1 >= 10 or null) as count2,
count(distinct groupid) as group_count1,
count(distinct (case when column1 < 10 then groupid end)) as group_count2, count(distinct (case when column1 >= 10 then groupid end)) as group_count3,
FROM testtable
GROUP BY regist_date
上記のようなSQLにすることで1度のクエリ実行で自身が得たいデータは全て取得できるようになった。
“group_count1“は全体における”groupid“の`distinct`の値。一意な`groupid`の数を取得できる。
“group_count2“は、`column1 < 10`の条件に合致した中での一意な`groupid`の数を取得できる。
“group_count3“は…以下略。
以上。