2017-04-10 61 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)