2017-04-03 37 views
2

enter image description here你好,我是初學者,我需要一些幫助,我在SQL數據庫PostgreSQL的需要,使總的行

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

當你嘗試'rollup'時會發生什麼? –

回答

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但它可以讓你明確地列出你想要的彙總行。

在快速的方式

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' 

,但更好的方法

0

是創造新的查詢,如果你把這個在子查詢計算總

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具有與第一個相同的列數和類型。