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 - ORDER BY 语句中的 IF...ELSE 或 CASE