2017-04-10 62 views
0

您好我有這樣Mysql的查找差異

month | type | passenger | 
2  | 1  | 15  | 
2  | 2  | 20  | 
2  | 2  | 18  | 
3  | 2  | 10  | 
3  | 1  | 15  | 
3  | 1  | 25  | 
4  | 2  | 30  | 
4  | 1  | 16  | 

我想類型總結乘客羣,兩個月,發現兩者之間的差異數據。例如。

SUM(乘客)作爲MONTH2其中一個月= 2基團由式

SUM((乘客)作爲month3其中一個月= 3基團由式

這裏月2
TYPE1 = 15
TYPE2 = 38

和月3
TYPE1 = 40
TYPE2 = 10

所以,我想造成像

差異
TYPE1 = 25
TYPE2 = 28

是否有可能做一個查詢?

謝謝你的任何幫助和建議。

+0

type2 = 28 for month 2?你的意思是38對嗎? –

+0

是的,我會糾正它 – sanu

+0

現在的差異將是28 ...還有,你想模數diffence?因爲15-40 = -25 –

回答

0

我會用一個條件語句中sum()總結只給定月份的數據,並會group by type

select type, abs(sum(if(month=2,passenger,0))-sum(if(month=3,passenger,0))) as difference 
from table 
where month in (2,3) 
group by type 
0

解決的課題

select 
SUM(CASE WHEN month=2 THEN passenger ELSE 0 END)- 
SUM(CASE WHEN month=3 THEN passenger ELSE 0 END) AS difference 
from table 
group by type 
0

下面就來查詢想要的結果的一種方式:

select p2.type, p2.m2, p3.m3, abs(p2.m2 - p3.m3) as diff 
from (
    select type, sum(passenger) as m2 
    from mytable 
    where month = 2 
    group by type 
) p2 inner join (
    select type, sum(passenger) as m3 
    from mytable 
    where month = 3 
    group by type 
) p3 on (p2.type = p3.type) 
; 

type | m2 | m3 | diff 
------+----+----+------ 
    1 | 15 | 40 | 25 
    2 | 38 | 10 | 28 
(2 rows)