2013-08-21 34 views
0

我有2個表,我需要查詢MySQL的3個查詢2表中的一個

**tbl_jobs** 
jobid | description | someinfo 
1  foo   bar 
2  fuu   buu 


**tbl_invlog** 
idinv | jobid | type | ammount 
1  1  add 100 
2  1  rem  50 
3  1  rem  15 
4  1  add  8 
5  2  add  42 

的結果應該是使庫存化「添加」和「REM」的總和,並給出一個總的爲每個jobid添加sum(add)-sum(rem),包括其餘的作業信息。

jobid | description | someinfo | amountadd | amountrem | totaladdrem 
1  | foo   | bar  | 108  | 65  | 43 
2  | fuu   | buu  | 42  | 0   | 42 

我做了一個四選擇語句與選擇*從(選擇....)不使用連接或其他很酷的東西。這是非常緩慢的。我對mysql很新。

我很高興能就如何解決這個問題的想法。 由於事先

回答

2

這是一個需要加入和有條件的聚集查詢:

select j.jobid, j.description, j.someinfo, 
     sum(case when il."type" = 'add' then amount else 0 end) as AmountAdd, 
     sum(case when il."type" = 'rem' then amount else 0 end) as AmountRem, 
     (sum(case when il."type" = 'add' then amount else 0 end) - 
     sum(case when il."type" = 'rem' then amount else 0 end) 
     ) as totaladdrem 
from tbl_jobs j left outer join 
    tbl_invlog il 
    on j.jobid = il.jobid 
group by j.jobid, j.description, j.someinfo; 

注意一些事情。首先,這些表具有在from子句中定義的表別名。這允許你說出哪些列是從哪裏來的。其次,表別名總是用於查詢中的所有列。

MySQL將允許您只使用名爲「hidden columns」的功能執行group by j.jobid。我認爲這是一個壞習慣(除了少數情況外),所以這將聚合到作業表中的所有列。

通過在sum()語句中添加條件來完成條件聚合。

+0

非常感謝。這解決了我的整個問題。 :) – swish