Mysql 查询 - 在 case 语句中使用 Locate 函数按源对流量进行分组

Posted

技术标签:

【中文标题】Mysql 查询 - 在 case 语句中使用 Locate 函数按源对流量进行分组【英文标题】:Mysql query - using Locate function in case statement to group traffic by source 【发布时间】:2012-07-06 02:04:03 【问题描述】:

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

假设表格有以下列

注册_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

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

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

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

一个

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

B

CASE
WHEN <condition>...

所以,只需删除您对referrer 的第一个引用,您的查询可能会起作用:

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

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

【讨论】:

哎呀 - 非常感谢 - 成功了 :) - 感谢您研究它

以上是关于Mysql 查询 - 在 case 语句中使用 Locate 函数按源对流量进行分组的主要内容,如果未能解决你的问题,请参考以下文章

MySQL CASE 语句在 Workbench 和 Angular 中返回不同的结果

mysql 查询某个字段并拼接case when出来的字段

mysql - ORDER BY 语句中的 IF...ELSE 或 CASE

MySQL group_concat() 按 case 语句值排序

MySQL: case when 用法

MySQL: case when 用法