BQクエリでの質問です 保持しているデータは下記です。 人 日時 スコア 何回目か A 2022/5/12 300点 はじめて参加 A 2022/5/13 20点 リピート参加
BQクエリでの質問です 保持しているデータは下記です。 人 日時 スコア 何回目か A 2022/5/12 300点 はじめて参加 A 2022/5/13 20点 リピート参加 A 2022/5/14 14点 リピート参加 B 2020/3/5 200点 はじめて参加 B 2021/7/16 150点 リピート参加 C 2022/5/13 200点 リピート参加 C 2022/5/14 10点 リピート参加 得たい結果は下記です はじめて参加 2人 684点 リピート参加 1人 210点 つまり、一番早い日付に何回目だったのかでグルーピングして、 スコアは合算したいです。(一番早い日付が初めて参加だった人は、初めて参加枠で点数を合算、リピート参加だった人はリピート参加者の枠で点数を合算) 何か良い方法はないでしょうか? caseを使う?などと思ったのですが、 プログラムなら一行ずつ読み込んで、最初の「何回目か」で判断して、、とかのイメージがつくのですが、BQクエリでの書き方がよくわからず・・・。 よろしくお願いします。
MySQL・21閲覧・250
ベストアンサー
ここでBQの質問をする人は、正規化しないのでしょうかね。。。 WITH botai AS ( SELECT 'A' AS hito,'2022/5/12' AS nichiji,300 AS score,'はじめて参加' AS kaisu UNION ALL SELECT 'A','2022/5/13',20,'リピート参加' UNION ALL SELECT 'A','2022/5/14',14,'リピート参加' UNION ALL SELECT 'B','2020/3/5',200,'はじめて参加' UNION ALL SELECT 'B','2021/7/16',150,'リピート参加' UNION ALL SELECT 'C','2022/5/13',200,'リピート参加' UNION ALL SELECT 'C','2022/5/14',10,'リピート参加' ), cte AS (SELECT *,FIRST_VALUE(kaisu) OVER(PARTITION BY hito ORDER BY nichiji) AS fv FROM botai ) SELECT fv,COUNT(DISTINCT hito) AS ninzu,SUM(score) AS score FROM cte GROUP BY fv ;
1人がナイス!しています
質問者からのお礼コメント
まことにありがとうございます! ヒントをくれる方などが多い中、具体的に動くSQLで示していただけたので、とても理解しやすく、実際に流してみてそれを実利用用に分解したり加工したりしてとても勉強になりました。 ありがとうございました。
お礼日時:6/13 8:22