2

我基本上是在尝试根据流量来源对流量进行分组

假设该表具有以下列

注册_ID | 最后修改 | 推荐人
     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 ) 作为“推荐人”
从入学 e
其中 e.last_modified >='2012-07-01 00:00:00'
按日期格式分组(e.last_modified,'%d/%m/%y'),3

这工作正常。但显然我会有不止一个推荐人。所以我想到了使用case语句

选择 count(*) 作为 'Enrollments',date_format(e.last_modified,'%d/%m/%y') 作为 'Date',
案例推荐人
当 LOCATE('facebook', referrer)>0 然后 'facebook'
当 LOCATE('google', referrer)>0 然后 'google'
其他推荐人
以“推荐人”结尾
从入学 e
其中 e.last_modified >='2012-07-01 00:00:00'
按日期格式分组(e.last_modified,'%d/%m/%y'),3

这不能按预期工作。

对于第一个和第二个查询 - 我创建了一个 sql fiddle

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

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

如果有人可以快速浏览一下,我将不胜感激

谢谢你的时间

4

1 回答 1

4

我从不使用 MySQL,但我习惯于在其他数据库中有两种类型的 CASE 语句,你似乎试图混合使用它们。

一种

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

CASE
WHEN <condition>...

因此,只需删除您对referrer 的第一次引用,您的查询可能会起作用:

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

另一件事是尝试将引荐来源网址拆分为多个字段可能会更简洁,其中一个字段是互联网地址。

于 2012-07-05T18:12:12.013 回答