(编写不易,转载请注明: https://shihlei.iteye.com/blog/2441050)
一 概述
近期支持运营活动,写sql出统计报表,计划group by ,count一下就行,但是对于多维度的统计需求,就考虑多个统计脚本,不同的where条件进行查询,再将多个统计结果按照日期聚合,明显多条sql麻烦。
网上查了下,count函数 和 sum函数 支持条件统计,使用这个技术,sql就简洁很多。
二 场景
数据源:
activity_user_records 活动日志表是一条指定用户活动消费记录
数据样例:
activity_id,user_id,user_grade, create_time, media_id, media_type,charge
统计需求:
统计 5月1日 ~ 5月31日 活动id为 1 的 “活动独立用户数”,“高级独立用户数(等级>10)”,“渠道1的活动记录数”,“渠道2用户总消费”,按照日期统计。
统计脚本:
SELECT date(create_time) as `date`, count(distinct user_id) as `独立用户数`, count(distinct user_id,IF(user_grade>10,true,null)) as `高级独立用户数(等级>10)`, sum(case when media_type=1 then 1 else 0 end) as `渠道1的活动记录数`, sum(if(media_type=1,charge,0)) as `渠道1用户总消费` FROM activity_user_records WHERE activity_id = 1 AND create_time > "2019-05-01 00:00:00" and create_time < '2019-05-31 00:00:00' GROUP BY date;
结果:
三 函数说明
1) 条件函数
(1)if 函数:
说明:
if(条件,条件成立时取值,条件不成立时取值)
其中:
参数2——条件成立时取值 ,参数3——条件不成立时取值 可以使用字段名
例子中:
count(distinct user_id,IF(user_grade>10,true,null)):user_grade>10 成立,则返回true,count统计,否则 反正 null 不统计
sum(if(media_type=1,charge,0)):media_type=1 成立,则使用 charge 字段的值进行sum,否则 加 0
(2)case when 关键字:
说明:
case
when 条件1 then 取值1
when 条件2 then 取值2
else 取值3
end
其中 取值都可以使用字段名
例子中:
sum(case when media_type=1 then 1 else 0 end) :media_type=1 时加1 ,否则 加0
这条语句可以用来替换 count操作,但是不具有排重统计功能
2)聚合函数
sum函数:累加函数
count函数:统计函数,可以配合 distinct 关键字进行排重统计。
相关推荐
在SQL中,您可以使用CASE子句来执行此操作,例如: SELECT stats_stat . campaign_id , SUM ( CASE WHEN ( stats_stat . stat_type = a AND stats_stat . event_type = v ) THEN stats_stat . count ELSE...
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type ...
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type ...
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type ...
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type ...
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type ...
用SQL来描述ReactorAPI进行数据处理 + = ReactorQL 场景 规则引擎,在线编写SQL来定义数据处理规则。 实时统计每分钟平均温度。 统计每20条滚动数据平均值。 ........ 特性 支持扩展映射select name username from...
修改多条或指定条件的数据,需要用where条件来完成。 修改所有数据 update temp set name = ‘jack2’; 所有的数据的name会被修改,如果修改多列用“,”分开 update temp set name = ‘jack’, age = 22; 修改指定...
count、sum、avg、max、min 1.8.2 case when 1.8.2.1 语法 select t.uuid, t.score, case when t.score > 90 then '优秀' when t.score > 60 then '及格' else '不及格' end from exam_user_exam t 1.8.3 ...
SQL sever 2008 Rar! ?s X祕BwL0 17240671-1.sql ?年3月9日 --1.查询course表的所有信息(所有行所有列) USE Xk GO SELECT * FROM Course --有哪些种类的选修课?学分是多少 USE XK GO SELECT Kind,Credit FROM ...
数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询) 数据控制语言Data Controlling Language(DCL),用来...
28、约束条件 create table employee (empno number(10) primary key, name varchar2(40) not null, deptno number(2) default 10, salary number(7,2) check salary, birth_date date, soc_see_num char(9) ...
------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/ 51、select count(*) from emp; --求出表中一共有多少条...