2

私は基本的にトラフィックソースに基づいてトラフィックをグループ化しようとしています

テーブルに次の列があるとします

Enrollment_ID | last_modified | リファラー
     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とは表示されません。これが私が使用したクエリです。

count(*)as'Enrollments'、date_format(e.last_modified、'%d /%m /%y')as'Date'、if(LOCATE('facebook'、referrer)> 0、'facebook'、referrer )「リファラー」として
登録からe
ここで、e.last_modified> = '2012-07-01 00:00:00'
date_format(e.last_modified、'%d /%m /%y')、3でグループ化

これは正常に機能します。しかし、明らかに私は複数のリファラーを持つことになります。だから私はcaseステートメントを使うことを考えました

count(*)を'Enrollments'、date_format(e.last_modified、'%d /%m /%y')as'Date'として選択します。
ケースリファラー
LOCATE('facebook'、referrer)>0の場合'facebook'
LOCATE('google'、referrer)>0の場合'google'
それ以外のリファラー
'リファラー'として終了
登録からe
ここで、e.last_modified> = '2012-07-01 00:00:00'
date_format(e.last_modified、'%d /%m /%y')、3でグループ化

これは期待どおりに機能しません。

1番目と2番目のクエリの場合-SQLフィドルを作成しました

最初-http://sqlfiddle.com/#! 2/70f6b/2

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

誰かがそれを一瞥することができれば私は感謝します

御時間ありがとうございます

4

1 に答える 1

4

私は MySQL を使用したことはありませんが、他のデータベースには 2 種類の CASE ステートメントがあることに慣れており、それらを混在させようとしているようです。

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

B

CASE
WHEN <condition>...

したがって、リファラーへの最初の参照を削除するだけで、クエリが機能する可能性があります。

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

もう 1 つのことは、リファラーを複数のフィールドに分割しようとする方がクリーンである可能性があることです。そのうちの 1 つがインターネット アドレスでした。

于 2012-07-05T18:12:12.013 に答える