当前位置: 首页 > 知识库问答 >
问题:

Mysql查询-使用case语句中的Locate函数按源分组流量

牛经赋
2023-03-14

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

假设该表包含以下列

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

现在referrer是不同的-所以即使我按referrer分组-它不会说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

这个很管用。但显然我会有不止一个推荐人。所以我想到用大小写语句

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 fiddle

第一个-http://sqlfiddle.com/#!2/70F6B/2

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

如果有人能快速看一眼,我将不胜感激

谢谢你抽出时间

共有1个答案

浦修文
2023-03-14

我从来不使用MySQL,但我已经习惯了在其他数据库中有两种类型的CASE语句,而您似乎正在尝试将它们混合使用。

a

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'

另一件事是,尝试将referrer拆分为几个字段可能会更干净,其中一个字段是internet地址。

 类似资料:
  • 我在mysql查询中使用CASE语句,我必须检查同一查询中是否存在列。 有可能这样做吗?如果是,请帮忙。 我的查询为例- 当“Status”时选择CASE column1,然后选择“Status”当“value”时(当id不为NULL时选择CASE id,然后选择“status1”,否则选择“status2”结束为table1 where condition中的ScheduleStatus)结束为

  • 问题内容: 我只想获取一个表“ b”的值,如果表“ a”的值是“-”如果表“ b”的值是空的,那么即使它是“-”,也要获取表“ a”的值 Microsoft Access对以下查询说“ Missing operator”: 我认为该错误是在CASE表达式行上。 问题答案: MS Access不支持语句。用途: 我不确定Access是否支持别名,但是它可能支持 注意(尽管标签正确),问题的标题可能会

  • 在mySQL查询中,我希望根据WHERE子句中PDO绑定的搜索参数条件选择客户机表的行。类似于 有两种情况:A)搜索参数包含字符串或B)搜索参数为空 在A的情况下,param包含例如一个客户端号'123'。 因此,我使用:,如果客户机在表中,则查询返回客户机123。 在B的情况下,字符串为空。因此我没有使用WHERE子句,查询只是返回表中的所有客户端 我当然可以写一个IF..SELECT查询之外的

  • 本文向大家介绍详解MySQL中的分组查询与连接查询语句,包括了详解MySQL中的分组查询与连接查询语句的使用技巧和注意事项,需要的朋友参考一下 分组查询 group by group by 属性名 [having 条件表达式][ with rollup] “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所

  • 问题内容: 我试图做这样的事情,即在switch语句中使用数组。Java可能吗?如果不是,请说明可能的解决方案。 问题答案: 不 ,您根本不能。 表达式的类型必须是char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(第8.9节),否则会发生编译时错误。 http://docs.oracle.com/javase/specs/jl

  • 本文向大家介绍MySQL NULLIF()控制流函数如何与CASE语句相似?,包括了MySQL NULLIF()控制流函数如何与CASE语句相似?的使用技巧和注意事项,需要的朋友参考一下 我们知道,如果两个参数都相同,则MySQL控制流函数将返回NULL,否则它将返回第一个参数。因此,它类似于以下CASE语句-