プロが教える店舗&オフィスのセキュリティ対策術

以下のようなテーブルが存在します。

A   B   C
1   1   3
1   2   4
2   3   3
2   2   3
・・・・

求めたい事は、
・Cの総合計
・A列におけるCの合計
・A&B列におけるCの合計
です。3回SQLをまわせばいい事かもしれませんが、行数がすさまじく多いので1回もしくは2回のSQLで上記の結果が得られればいいなと思っています。

何かいい案がありましたらご教授いただきたくよろしくお願いします。

A 回答 (3件)

#1回答者です。



#1で示した集計結果行を、nullで判定するのでなく、0か1かで得られる記述もできますので、参考まで。

【SQL例】
select A,B,sum(c),grouping(A) as gA,grouping(B) as gAB
from t1
group by A,B with rollup

【結果】・・・「-」はnull値です
A B sum(c) gA gAB
1 1 3 0 0
1 1 4 0 0
1 - 7 0 1 →A=1の合計
2 2 3 0 0
2 3 3 0 0
2 - 6 0 1 →A=2の合計
- - 13 1 1 →総合計
    • good
    • 0

Case文を使って



Select
Sum(case When A=0 then 1 else 0 end
+case When B=0 then 1 else 0 end
+case When C=0 then 1 else 0 end
) as total,
Sum(case When A=0 then 1 else 0 end) as asum

で出すとか…。
    • good
    • 0

group byでrollup指定する方法がありますが、いかがでしょうか?



【SQL例】
select A,B,sum(c)
from t1
group by A,B with rollup

【結果】・・・「-」はnull値です
A B sum(c)
1 1 3
1 1 4
1 - 7 →A=1の合計
2 2 3
2 3 3
2 - 6 →A=2の合計
- - 13 →総合計
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!