2015-05-02 66 views
0

我有表如下從MySQL數據庫中獲取最大計數

+------+------+------+----------+ 
| vno | ino | cno | quantity | 
+------+------+------+----------+ 
| V1 | I1 | C1 |  150 | 
| V1 | I5 | C1 |  100 | 
| V1 | I5 | C4 |  150 | 
| V2 | I2 | C1 |  50 | 
| V2 | I2 | C4 |  500 | 
| V2 | I2 | C5 |  500 | 
| V2 | I3 | C4 |  300 | 
| V2 | I6 | C4 |  300 | 
| V3 | I1 | C1 |  10 | 
+------+------+------+----------+ 

我想找回誰買了最大數量

以下的客戶是我的查詢

SELECT Delivery.cno, sum(Delivery.quantity) as totalQuantity From Delivery group by Delivery.cno 

此查詢給下面的結果

+------+---------------+ 
| cno | totalQuantity | 
+------+---------------+ 
| C1 |   310 | 
| C4 |   1250 | 
| C5 |   500 | 
+------+---------------+ 

然後,我修改了它,以獲得最大總Quentity,

SELECT B.cno,max(B.totalQuantity) as maxQuantity from 
(SELECT Delivery.cno, sum(Delivery.quantity) as totalQuantity From Delivery group by Delivery.cno) B order by B.cno; 

它給了我下面的結果

+------+---------------+ 
| cno | totalQuantity | 
+------+---------------+ 
| C1 |   1250| 

這個答案是完全錯誤的,因爲C1有310計數,不是1250

有人可以幫我瞭解我的查詢有什麼問題

在此先感謝

回答

2

您的查詢正在運行,因爲如果select中的列未彙總,或者group ed by中有列,所以它管理顯示B.cno,但結果不正確。

如果總和是獨一無二的,你可以使用以下方法:按總sum順序降序排列的紀錄,並獲得第一條記錄(最大totalQuantity):

select Delivery.cno 
    , sum(Delivery.quantity) as totalQuantity 
from Delivery 
group by Delivery.cno 
order by totalQuantity desc 
limit 1 

否則,您可以使用查詢上述發現的最大totalQuantity,然後檢查每個分組Delivery.cno如果它sum(Delivery.quantity)等於使用having條款最大。

+0

謝謝你的解決方案。你能幫助我理解爲什麼我使用的查詢不使用MySQL。是不是因爲MySQL數據庫的限制 – KItis

1

總和可能不是唯一的。嘗試:

select Delivery.cno, sum(Delivery.quantity) as totalQuantity 
from Delivery 
group by Delivery.cno 
having totalQuantity = max(totalQuantity)