Oracle - グループレベルの概要
-
23-09-2019 - |
質問
グループごとにまとめたレポートを作成しようとしています。例えば:
ID NAME COUNT TOTAL TYPE ------------------------------------------------------------- 1 Test 1 10 A 2 Test 2 8 A 18 7 Mr. Test 9 B 12 XYZ 4 B 13 25 ABC 3 C 26 DEF 5 C 19 GHIJK 1 C 9
TOTAL 列以外のすべてを実行できるクエリがあります。
select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
from some_data sd, data_defs defs
where sd.data_def_id = defs.data_def_id
group by some_data.type, some_data.id, defs.data_nam
order by some_data.id asc, count(amv.MSG_ID) desc ;
グループの概要を取得する方法がわかりません。この場合、ID のグループごとに COUNT の合計を取得しようとしています。
アップデート:
グループはタイプごとにあります。元の投稿ではそれを忘れていました。
TOTAL は各グループの SUM(COUNT) です。
解決
どのように...
のようにROLLUPを使用する方法について select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
from some_data sd, data_defs defs
where sd.data_def_id = defs.data_def_id
group by ROLLUP(some_data.type, (some_data.id, defs.data_nam))
order by some_data.id asc, count(amv.MSG_ID) desc ;
この作品が、私は2つのだけの列ではなく、必ずそれはより多くのオーバーどのように機能するか...
上でそれをやりました
これは便利ですホープ、
クレイグ...
EDIT:ROLLUP、あなたはidとdata_namなどの小計を超えるが、括弧内ROLLUP内でひとまとめにする必要があります以上の合計ではなく、したい列)で
他のヒント
SQL * Plusであると仮定すると、あなたはこのような何かを行うことができます:
col d1 noprint
col d2 noprint
WITH q AS
(SELECT sd.id, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
FROM some_data sd JOIN data_defs defs ON (sd.data_def_id = defs.data_def_id)
GROUP BY some_data.type, some_data.id, defs.data_nam)
SELECT 1 d1, type d2, id, count, name FROM q
UNION ALL
SELECT 2, type, null, null, null, SUM(count) FROM q GROUP BY 2, type
ORDER BY 2,1,3;
私は、PL / SQL Developerの8、唯一のSQL * Plusでこの作業を行うことができません。さえコマンドウィンドウに動作します...
タイプのすべての項目の数を返すサブクエリを試してみてください。これでしょう。
select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, tot.TOTAL_FOR_TYPE, defs.data_name NAME, sd.type
from some_data sd, data_defs defs,
(select count(sd2.DATA_DEF_ID) TOTAL_FOR_TYPE
from some_data sd2
where sd2.type = sd.type) tot
where sd.data_def_id = defs.data_def_id
group by some_data.type, some_data.id, defs.data_nam
order by some_data.id asc, count(amv.MSG_ID) desc ;