2017-04-10 6 views
0

こんにちは私は2ヶ月で、種類によって乗客のグループを合計し、両者の違いを見つけたい、この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  | 

のようなデータを持っています。たとえば。ヶ月間ここタイプ

によってmonth3ここ月= 3グループとしてタイプ

SUM((乗客)によってMONTH2ここ月= 2基として

SUM(乗客)2
TYPE1 = 15
TYPE2 = 38

月3
TYPE1 = 40
TYPE2 =

10は、だから私は

違い
TYPE1 = 25
タイプ2 = 28

のようになりたいが、それは1つのクエリでそれを行うことは可能ですか?

ご協力いただきありがとうございます。

+0

2月28日?あなたは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)