2016-02-28 84 views
0

我從那裏我需要計算一些數值的總和,然後把每一筆最高值的表。 我有代碼是以下:如何從一個SUM()子查詢中的MAX()在SQL

SELECT q1.prod_code, q1.cust_code, MAX(q1.total_sum) 
FROM (SELECT k2.prod_code, k2.cust_code, SUM(k2.price) AS total_sum FROM reservation AS k2 GROUP BY k2.prod_code, k2.cust_code) AS q1 
GROUP BY q1.prod_code 

從上面我幾乎得到正確的結果。 我得:

prod_code | cust_code | total_sum
1001 | 10002 | 75
1002 | 10005 | 209
1003 | 10005 | 350
1004 | 10002 | 650

但取而代之的是我得到:

prod_code | cust_code | total_sum
1001 | 10001 | 75
1002 | 10001 | 209
1003 | 10003 | 350
1004 | 10001 | 650

其實CUST_CODE是在子查詢中的每個單獨的prod_code所述第一值。

你有什麼想法可能是錯的?

+0

我相信你的問題是與你的外''組'''。 'Mysql'允許這樣做,但大多數其他數據庫不會。它基本上返回一個隨機的'cust_code'。您需要回到相同的查詢才能獲得正確的查詢。 – sgeddes

+0

這可能是,但如何加入與外部子查詢? – ToroLoco

回答

0

正如我在評論中提及,mysql允許你從group by條款離開了非聚合領域。這樣做時,不能保證這些省略值的結果。

要解決你的問題,你需要join聯合查詢回原來的查詢。雖然不是很漂亮,使用多個聚合,像這樣的東西應該工作:

SELECT t1.prod_code, t2.cust_code, t1.max_total_sum 
FROM (
    SELECT prod_code, MAX(total_sum) max_total_sum 
    FROM (
     SELECT prod_code, cust_code, SUM(price) AS total_sum 
     FROM reservation 
     GROUP BY prod_code, cust_code) AS q1 
    GROUP BY prod_code 
) t1 JOIN (
    SELECT prod_code, cust_code, SUM(price) AS total_sum 
    FROM reservation 
    GROUP BY prod_code, cust_code) AS t2 ON t1.prod_code = t2.prod_code 
     AND t1.max_total_sum = t2.total_sum 
+0

我得到「未知列't1.prod_code'在ON子句 – ToroLoco

+0

@ToroLoco - 我沒有測試過這看起來像我有我剛纔編輯不知道爲什麼prod_code不會工作,雖然總和向後 – sgeddes

+0

。不知何故,mysql在其外面看不到子查詢屬性。 – ToroLoco