2012-07-05 58 views
2

基本上,我試圖找到組在case語句功能組交通我基於業務源流量MySQL查詢 - 用源

比方說表有以下幾列

 
Enrollment_ID |  last_modified   | referrer 
    1  | 2012-07-01 15:00:00  | http://www.facebook.com/l.php?xyz 
    2  | 2012-07-01 16:00:00  | http://www.facebook.com/l.php?abc 

現在引用是不同的 - 所以即使我集團通過其引薦 - 它不會說2 所以這是我用

 
select count(*) as 'Enrollments',date_format(e.last_modified,'%d/%m/%y') as 'Date', if(LOCATE('facebook', referrer)>0,'facebook',referrer) as 'referrer' 
from enrollment e 
where e.last_modified >='2012-07-01 00:00:00' 
group by date_format(e.last_modified,'%d/%m/%y'),3 

這工作正常查詢。但顯然我會有多個推薦人。 所以我想用case語句

 
select count(*) as 'Enrollments',date_format(e.last_modified,'%d/%m/%y') as 'Date', 
case referrer 
when LOCATE('facebook', referrer)>0 then 'facebook' 
when LOCATE('google', referrer)>0 then 'google' 
else referrer 
end as 'referrer' 
from enrollment e 
where e.last_modified >='2012-07-01 00:00:00' 
group by date_format(e.last_modified,'%d/%m/%y'),3 

預期這不起作用的。

對於第一和第二查詢 - 我創建了一個SQL小提琴

首先 - http://sqlfiddle.com/#!2/70f6b/2

二 - http://sqlfiddle.com/#!2/ad890/3

,我會很感激,如果有人能在它

採取快速瀏覽

感謝您的時間

回答

3

我從來沒有使用MySQL,但我習慣於有兩種類型的CA SE聲明在其他數據庫中,你似乎試圖混合它們。

一個

CASE <Field Name> 
WHEN <value>... 

CASE 
WHEN <condition>... 

所以,只要刪除你的第一個參考引用,和您的查詢可能工作:

case 
    when LOCATE('facebook', referrer)>0 then 'facebook' 
    when LOCATE('google', referrer)>0 then 'google' 
else referrer 
end as 'referrer' 

另一件事是,它可能是清潔工嘗試將推薦人分成幾個領域,其中之一是互聯網地址。

+0

哎呀 - 非常感謝 - 工作:) - 感謝您看着它 – Gublooo 2012-07-07 06:14:53