PostgreSQL需要制作TOTAL ROW

时间:2017-04-03 11:58:00

标签: sql postgresql sum row

enter image description here你好我是Begginer,我需要一些帮助,我的SQL数据库中有这个代码

SELECT round(SUM(Cena)::NUMERIC,2) AS CelkovaCena, a.Meno, a.Priezvisko,Nazov
FROM Predstavenie
JOIN Autor a ON Predstavenie.ID_Autor = a.ID_Autor
WHERE a.Meno = 'Juraj' AND a.Priezvisko = 'Klein'
GROUP BY a.Meno,a.Priezvisko,Nazov;

这是我在运行此SELECT后得到的结果。

2.2 |    Juraj   |  Klein  |    Po východe slnka
5.4 |    Juraj   |  Klein  |    Ako išiel Ferenc po hlavnej
0.5 |    Juraj   |  Klein  |    Protialkoholické hnutie Klein Ferenc PHKF

我需要从col“cena”下面总行。我需要这样的东西。

2.2 |    Juraj   |  Klein  |    Po východe slnka
5.4 |    Juraj   |  Klein  |    Ako išiel Ferenc po hlavnej
0.5 |    Juraj   |  Klein  |    Protialkoholické hnutie Klein Ferenc PHKF
8.1 |                      |                          |    

Rollup似乎因为群组而无法运作。我在互联网上查找各种解决方案,但它们都不起作用......谢谢。

3 个答案:

答案 0 :(得分:3)

使用GROUPING SETS

SELECT round(SUM(Cena)::NUMERIC,2) AS CelkovaCena, a.Meno,
       a.Priezvisko, Nazov
FROM Predstavenie p JOIN
     Autor a
     ON p.ID_Autor = a.ID_Autor
WHERE a.Meno = 'Juraj' AND a.Priezvisko = 'Klein'
GROUP BY GROUPING SETS ((a.Meno, a.Priezvisko, Nazov), ());

这与ROLLUP类似,但它允许您明确列出所需的摘要行。

答案 1 :(得分:0)

快速的方式

SELECT round(SUM(Cena)::NUMERIC,2) AS CelkovaCena, a.Meno, a.Priezvisko,Nazov
FROM Predstavenie
JOIN Autor a ON Predstavenie.ID_Autor = a.ID_Autor
WHERE a.Meno = 'Juraj' AND a.Priezvisko = 'Klein'
GROUP BY a.Meno,a.Priezvisko,Nazov
union all
SELECT round(SUM(Cena)::NUMERIC,2) AS CelkovaCena,null as Meno,null as Nazov
FROM Predstavenie
JOIN Autor a ON Predstavenie.ID_Autor = a.ID_Autor
WHERE a.Meno = 'Juraj' AND a.Priezvisko = 'Klein'

但更好的方法是创建新的查询来计算总数

答案 2 :(得分:0)

WITHUNION组合在一起可以为您提供所需的内容。

WITH subq AS (SELECT round(SUM(Cena)::NUMERIC,2) AS CelkovaCena, a.Meno, a.Priezvisko,Nazov
FROM Predstavenie
JOIN Autor a ON Predstavenie.ID_Autor = a.ID_Autor
WHERE a.Meno = 'Juraj' AND a.Priezvisko = 'Klein'
GROUP BY a.Meno,a.Priezvisko,Nazov)
SELECT * FROM subq
UNION
SELECT SUM(CelkovaCena), '', '', '' FROM subq;

这可以节省您必须两次获得结果并减少不必要的速度。只需确保每个SELECT具有与第一个相同的列数和类型。