2013-10-16 24 views
0

讓當我使用這個查詢如何瑪吉在mysql中列的值

select class_id,case when event_id=2 then sum(time_spent) end as timespent ,case when event_id=3 then sum(time_spent) end as timespent from class group by class_id; 

輸出看起來像考慮這個查詢

select class_id,case when event_id=2 then sum(time_spent) end as timespent ,case when event_id=3 then sum(timespent) end as visitedtimespent from class group by class_id,event_id; 

輸出看起來像

class_id  timespent visitedtimespent 

1    2000  NULL 
1    NULL  10 
2    4000  NULL 
2    NULL  5 

class_id  timespent visitedtimespent 

1    2000  NULL 
2    4000  NULL 

,但我預計今年產量

class_id  timespent visitedtimespent 

1    2000  10 
2    4000   5 

我怎麼能做到這一點?

回答

0
select class_id, 
     sum(case when event_id=2 then time_spent else 0 end) as timespent, 
     sum(case when event_id=3 then time_spent else 0 end) as visitedtimespent 
from class 
group by class_id 
0

總結此案。

select class_id, 
sum(case when event_id=2 then time_spent end) as timespent , 
sum(case when event_id=3 then time_spent end) as visitedtimespent 
from class group by class_id; 

解釋的區別: case when id... then sum(value)相當於

select case when id then value from 
(
    select id, sum(value) as value from table 
)subquery 

這是一個非法分組(ID不聚集或包括在分組,所以將ID值將在所有的間隨意選擇現有的條目),您的ID信息將會丟失。如果您隨後將案例應用到ID信息中,您將無法獲得相關結果。

+0

謝謝這兩個答案是有用的,但爲什麼總和不同於案件內部和案件之外,由於按功能分組,所有的任何鏈接都更有幫助 – kumar