2012-05-03 186 views
3

私はCount列の合計を行う行、 'Total'を表示しようとしています。次のコードには、EnvironmentとCountという2つの列があります。SQLの最終行として合計を追加するにはどうすればよいですか?

select 
case 
when env is null THEN 'Unknown' 
else env 
end, 
count(*) as Count 
from env_table 
group by env 
order by env 
/

私は希望の出力:

Windowsの200

Linuxの120

合計320

あなたは私がやりたいものを、上記の見ることができるように行を追加することです基本的にはSUM(count(*))を実行する最後に「Total」と呼ばれます。これを行うための正しい構文は何ですか?ありがとう!このような

SELECT IFNULL(env, 'Unknown'), 
     COUNT(*) AS Count 
FROM  env_table 
GROUP BY env WITH ROLLUP 
ORDER BY env 
+1

それはSQLにする必要がありますか?あなたは通常、この種のものを1つのクエリに混ぜることはありません。データがレコードの行であれば、それはすべてです。要約データは別です。すでに示されているように、それはやり遂げることができます。なぜあなたが望むのか分かりません。実行されるクエリの数を減らすことには賞はありません。 – Cylindric

答えて

15

GROUP BYからWITH ROLLUP修飾子を使用しますか?

SELECT IFNULL(env, 'Unknown'), 
     COUNT(*) AS Count 
FROM env_table 
GROUP BY env 
ORDER BY env 
UNION ALL 
SELECT null, 
     Count(*) 
FROM env_table 
+3

これはレースではありません。編集内容をスパムする必要はありません。あなたの時間をとりなさい... – Cylindric

+0

@Cylindric:同意。私は最初に質問を誤解していました(OPはトータルの列ではなく、トータルの列を求めていたと思っていました)。 – eggyal

+1

ロールアップはまさに私が探していたものです。今のところ唯一の問題は、行が「不明」としてリストされていることです。これを「トータル」にするにはどうすればよいですか?ご協力いただきありがとうございます! – ad2387

3

多分何か:

0
SELECT env, count 
    FROM (SELECT CASE WHEN env is null THEN 'Unknown' ELSE env END env, 
       count(*) count 
      FROM env_table 
     GROUP BY env 
     ORDER BY env) 
UNION ALL 
SELECT 'Total' env, 
     count(*) count 
    FROM env_table  
0
SELECT COALESCE(env, 'Total') AS Description, 
     COUNT(*) AS Count 
FROM  env_table 
GROUP BY env WITH ROLLUP 
ORDER BY env 
関連する問題