`

SQL进行条件统计:count,sum 配合if函数或case when 使用

    博客分类:
  • DB
阅读更多

 

(编写不易,转载请注明: 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 关键字进行排重统计。

 

 

  • 大小: 86.7 KB
  • 大小: 21.2 KB
分享到:
评论

相关推荐

    django-conditional-aggregates:Django聚合可有条件运行的函数(即生成SQL`CASE`语句)

    在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...

    经典全面的SQL语句大全

    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语句大全

    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语句

    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经典语句一部分

    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)

    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 ...

    reactr-ql:用SQL来描述Reactor API。可用SQL来实现数据处理逻辑,支持实时数据处理,支持聚合,分组,自定义函数等功能,让数据处理更简单

    用SQL来描述ReactorAPI进行数据处理 + = ReactorQL 场景 规则引擎,在线编写SQL来定义数据处理规则。 实时统计每分钟平均温度。 统计每20条滚动数据平均值。 ........ 特性 支持扩展映射select name username from...

    mysql数据库的基本操作语法

    修改多条或指定条件的数据,需要用where条件来完成。 修改所有数据 update temp set name = ‘jack2’; 所有的数据的name会被修改,如果修改多列用“,”分开 update temp set name = ‘jack’, age = 22; 修改指定...

    SQL培训第一期

    count、sum、avg、max、min 1.8.2 case when 1.8.2.1 语法 select t.uuid, t.score, case when t.score &gt; 90 then '优秀' when t.score &gt; 60 then '及格' else '不及格' end from exam_user_exam t 1.8.3 ...

    SQL sever 实训

    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 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    Oracle事例

    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) ...

    精髓Oralcle讲课笔记

    ------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/ 51、select count(*) from emp; --求出表中一共有多少条...

Global site tag (gtag.js) - Google Analytics