###前提・実現したいこと
SQLで集計するときにDISTINCTした行だけSUMをしたいです。
例えば下記のようなログテーブルがあったとします。
log_table
user_id | value |
---|---|
1 | 1.2 |
1 | 1.2 |
2 | 1.1 |
3 | 2.3 |
3 | 2.3 |
4 | 1.2 |
上記のテーブルはuserのアクセスログを以下の様なマスタにあてて作られたテーブルです。
master_table
user_id | value |
---|---|
1 | 1.2 |
2 | 1.1 |
3 | 2.3 |
4 | 1.2 |
5 | 1.3 |
ここで上のログテーブルだけからuser_idの重複を除いたvalueの合計を得たいです。
つまり上記であれば
1.2 + 1.1 + 2.3 + 1.2 = 5.8
を得たいです。
下のマスタテーブルを使って
sql
1SELECT SUM(m.value) 2FROM master_table m 3WHERE EXISTS( 4 SELECT user_id 5 FROM log_table l 6 WHERE l.user_id = m.user_id 7)
とすれば得られると思うのですが、master_tableもlog_tableも非常に大きいため、できればすでにjoinしてあるlog_tableだけで完結させたいです。
何か良い方法ないでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
Hive(HiveQL)を使っていますが、他のDBでも何か知ってる方法がありましたら、調べる手がかりになりますので、教えていただけると助かります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。