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似乎因为群组而无法运作。我在互联网上查找各种解决方案,但它们都不起作用......谢谢。
答案 0 :(得分:3)
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)
将WITH
和UNION
组合在一起可以为您提供所需的内容。
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
具有与第一个相同的列数和类型。