2012-05-11 23 views
0

私は単一のmysqlクエリで、次のクエリにすべての列値の合計の値を合計として新しい行を追加します。単一のmysqlクエリ

GROUP BY username,DATE(enddt) WITH ROLLUP; 

(あなたのケースでは、これは各ユーザ名の小計が表示され、すべての結果の合計):GROUP BYWITH ROLLUP修飾子を使用して私に

SELECT username,enddt,SUM(zerotothirty) AS 0To30, 
SUM(thirtytosixty) AS 31To60,SUM(sixtytoonetwenty) AS 61To120, 
SUM(onetwentytotwoforty) AS 121To240,SUM(greaterthantwoforty) AS '>240' 
FROM 
(SELECT username,DATE(enddt) AS enddt,tickid, 
IF(duration <=30, 1,0) zerotothirty, 
IF(duration BETWEEN 31 AND 60, 1,0) thirtytosixty, 
IF(duration BETWEEN 61 AND 120,1,0) sixtytoonetwenty, 
IF(duration BETWEEN 121 AND 240,1,0) onetwentytotwoforty, 
IF(duration >240,1,0) greaterthantwoforty 
FROM report)AS r 
GROUP BY username,DATE(enddt); 
+0

としてあなたのCREATE TABLEコマンド –

答えて

1

を助けてください。

+0

を投稿とても – suresh

+0

@sureshありがとう:全く問題ありませんが。参考までに、あなたが問題を解決したら[回答を受け入れる](http://meta.stackexchange.com/a/5235)し、問題が解決すれば[upvote](http://stackoverflow.com/privileges/vote-up)便利で役立つ。 – eggyal

0

ロールアップとEggyalの答えを補うために、あなたはあなたのIF(と合計することによって、あなたを簡素化することができ)

SELECT 
     username, 
     DATE(enddt) AS enddt, 
     SUM(IF(duration <=30, 1,0)) as 0To30, 
     SUM(IF(duration BETWEEN 31 AND 60, 1,0)) as 31To60, 
     SUM(IF(duration BETWEEN 61 AND 120,1,0)) as 61To120, 
     SUM(IF(duration BETWEEN 121 AND 240,1,0)) as 121To240, 
     SUM(IF(duration >240,1,0)) as '>240' 
    FROM 
     report 
    GROUP BY 
     username, 
     DATE(enddt) 
    WITH ROLLUP 
+0

SUM(IF(継続時間<= 30,1,0))AS 0To30、 SUM(IF(期間(BETWEEN)期間) SUM(IF(期間BETWEEN 121 AND 240,1,0))AS 121To240、AS 121 To120、AS12110、AS121、AS122、AS122、AS123、 SUM(IF(継続時間> 240,1,0))AS '> 240' レポートのどこからユーザ名がNULLではなく、deptid = 1 GROUP BY username WITH ROLLUP; – suresh

+0

@ suresh、あなたはコメントとして質問を投稿しました。投稿をいつでも編集して追加することができます。あなたが投稿したクエリは何ですか?あなた以外は、今度はtickIDを再計算しているようです。 – DRapp

関連する問題