2017-01-12 11 views
0

下部に合計を追加しようとしていますが、下部に「合計」を表示する構文を取得する方法はわかりません。私はそれをオンラインで検索するのに疲れてしまった。私はSalesがない従業員のためにゼロを表示する必要があるので、合体スニペットが必要です。私はこのリンクを見ましたが、ゼロが合体していなければなりません。サブクエリで合計を追加する

Add a row for TOTAL in a sql query result

select t2.Employee, coalesce(t1."This Week",0) "This Week" 
from mytable t2 left outer join 
(select case when grouping(Employee) = 1 then 'Total' else Employee end, sum(Sales) "This Week" 
from information 
where Week >= DATE '01/01/2017' and Week < DATE '01/31/2017' 
and LastUpdate >= DATE '01/01/2017' and LastUpdate < DATE '01/31/2017' 
group by Employee with Rollup) t1 
on t1.Employee = t2.Employee 

結果:

Employee     This Week 

Batman      15 
Penguin      25 
Joker      0 
Bane       5 
Scarecrow     0 
------------------->   45 

エラー:

ERROR: syntax error at or near "with" 
LINE 8: group by Employee with Rollup) t1 
+0

変更あなたの 'グループの文by'' Rollup'を持つグループ、従業員が見てその場合は –

+0

あなたは['ROLLUP'](https://www.postgresql.org/docs/devel/static/queries-table-expressions.html)を探しています。 –

+0

でエラーを表示します... –

答えて

1

あなたはでこれを試すことができますROLLUP

SELECT coalesce(Employee,'Total'), 
     "This Week" 
FROM 
    (SELECT t2.Employee, 
      coalesce(sum(t1.Sales),0) "This Week" 
    FROM mytable t2 
    LEFT JOIN information t1 ON t1.Employee = t2.Employee 
    AND t1.Week >= DATE '01/01/2017' 
    AND t1.Week < DATE '01/31/2017' 
    AND t1.LastUpdate >= DATE '01/01/2017' 
    AND t1.LastUpdate < DATE '01/31/2017' 
    GROUP BY rollup(t2.Employee) 
) x 
+0

ありがとうございました。 –

+0

はい、それを編集しました。 –

1

外部クエリは必要ありません。 WeekとLastUpdateの条件に加えて、結合操作は関係ありません。あなたは、WHERE句に移動することができます(PostgreSQLのオプティマイザは、とにかく自分自身を行う必要がありますが、その方法は、あなたのクエリは、より明確である):

SELECT 
    COALESCE(t2.Employee, 'Total') AS Employee, 
    COALESCE(SUM(t1.Sales), 0) AS "This Week" 
FROM mytable t2 
LEFT JOIN information t1 USING (Employee) 
WHERE t1.Week BETWEEN DATE '01/01/2017' AND DATE '01/31/2017' 
    AND t1.LastUpdate BETWEEN DATE '01/01/2017' AND DATE '01/31/2017' 
GROUP BY GROUPING SETS ((t2.Employee),()); 
+0

ありがとう@ Fabian、それはエラーを(Employee)を使用してエラーをスローします:USING句で指定された "Employee"列が右のテーブルに存在しません。 –

+0

?あなたの情報テーブルには従業員の列はありませんか?どのように受け入れられた答えがあなたのために働いたのですか? :/ –

関連する問題