2016-11-25 51 views
0

我需要2個不同的SUM,但沒有按同一組進行分組。Mysql 2 SUM和不同的組

這個問題有點奇怪,讓我們舉個例子吧。我有一個查詢(比方說,一個經典的選擇),輸出這組數據:爲簡要說明

+----+------+------+----+----------+ 
| id | t_id | o_id | lt | quantity | 
+----+------+------+----+----------+ 
| 1 | 1 | 1 | 30 |  50 | 
| 2 | 2 | 10 | 90 |  90 | 
| 3 | 4 | 10 | 10 |  20 | 
| 4 | 4 | 10 |  5 |  20 | 
| 5 | 4 | 9 | 20 |  20 | 
+----+------+------+----+----------+ 

現在,t_idfuel ido_idorder idlt是升運量, quantity是給定燃料的訂購數量(以升計)。

所以,如果我解釋第1行:order #1是50升fuel #1,目前只有30升已經發貨。

第2,3和4行:order #10需要90升fuel #2和20升fuel #4。 90升的fuel #2已經發貨,10 + 5升的燃料#4已經發貨。換句話說:order #10需要90 + 20升燃料(任何燃料),並且90 + 10 + 5升已經發貨。現在

,棘手的問題是,我想SELECT SUM(lt), SUM(quantity)lt通過o_idquantity通過t_id, o_id分組分組。預期的輸出是:

+----+------+------+---------+---------------+ 
| id | t_id | o_id | SUM(lt) | SUM(quantity) | 
+----+------+------+---------+---------------+ 
| 1 | 1 | 1 |  30 |   50 | 
| 2 | 2 | 10 |  105 |   110 | <-- 90+10+5 | 90+20 
| 5 | 4 | 9 |  20 |   20 | 
+----+------+------+---------+---------------+ 

有關如何實現這一點的任何想法?我希望我的問題得到很好的解釋。

感謝您的幫助。 PS:實際上,整個問題可以概括爲:是否有可能將2個聚合體按不同的值分組?

PS2:這裏是一個SqlFiddle給幾乎相同的一組(如第一)

- 編輯 -

可恥的是我...我沒有問題的正確方式,我也沒有清楚地知道它。但是感謝@mendosi和他的建議(這讓我意識到我的錯誤)。其實,我只需要SUM訂購的燃料數量,不管是哪種燃料,SUM不管是哪種燃料都可以運送燃料的數量,就這些。

所以這裏是最後的sqlfiddle,最後的請求是我使用的最終請求。

+0

你確定你的數據我沒錯。您的訂單10需要90 + 20 + 20升左右的樣本數據 – e4c5

+1

而不是看到您當前的輸出,最好向我們顯示原始表格和查詢。 –

+0

該設置是正確的,只是不詳細。這個集合是從一個複雜的查詢中提取的,'lt'來自'shipments'表格,這就是爲什麼可以有一個或多個數量來獲得數量(這是給定訂單的給定燃料的數量) – Max13

回答

1

如果您使用的是原始源行,但如果我們假設您將粘貼的表格作爲來源,則此答案可能會有所不同,那麼以下查詢應該會得到正確的結果:

Select a.o_id, 
    a.lt, 
    b.quantity 
    From (Select o_id, Sum(lt) As lt From Input As i Group By o_id) As a 
    Join (
     Select o_id, Sum(quantity) As quantity 
     From (
      Select o_id, t_id, Min(quantity) As quantity 
       From Input Group By o_id, t_id 
      ) As c 
     Group By o_id 
     ) As b 
    On a.o_id = b.o_id; 

在所提供的輸入數據,它看起來好像重複quantity字段所有行具有相同t_ido_id所以我用子查詢所有那些行塌陷到一個且只得到一個單一(Min())值對於quantity(子查詢c)。然後,我通過外部子查詢(b)中的o_id進行彙總。lt的值在第三個子查詢a中的o_id之間求和。

+0

謝謝你的回答,它似乎工作。我並不真正瞭解如何正確處理「明顯的數量」(可能有多次相同的「數量」,而不是指相同的「o_id」,在這種情況下,它已經是不同的值了。無論如何,目前我的設置值得注意的是,輸出結果是正確的,非常感謝。順便說一句,沒有'MIN'或'MAX'它們只是分組的值,只要我使sqlfiddle工作,我就會發布我的巨大數據量 – Max13

+0

@ Max13現在你提到它...這是一個問題,如果一個訂單對於兩種燃料類型具有相同的數量,請告訴我什麼時候有樣品數據 – mendosi

+0

@ Max13我改變了查詢以處理我們描述的異常。請檢查新查詢是否正確。 – mendosi