`

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
分享到:
评论

相关推荐

    case when和sum case when 写法及拼接字段

    这个查询通过 `SUM` 函数与 `CASE WHEN` 的组合使用,可以轻松地统计出每种订单状态的数量。 ### 拼接字段 在 SQL 中,经常需要将多个字段或值合并成一个字符串。这可以通过使用字符串连接操作符(如 `+` 或 `||`...

    详细解析 mysql 中的 case when 语句的使用

    - 类似于使用`IF`函数的方法,但使用`CASE WHEN`语句替换`IF`函数。 - 对于每个`download_type_id`的值,使用`CASE WHEN`语句检查是否等于特定的类型ID,如果是,则计数器加1,否则计数器加0。 - 使用`SUM()`函数...

    使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解

    总结来说,通过在 `SUM` 和 `COUNT` 函数中使用 `IF` 或 `CASE WHEN` 判断条件,我们可以更加精细化地处理数据,以满足特定的统计需求。这在数据分析和报表生成中非常实用,能够帮助我们获取更有针对性的信息。理解...

    sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End

    - 在外部查询中使用`SUM`函数对这些字段进行汇总,并使用`COUNT(*)`计算记录数量。 - 对于`zong_ds`字段,使用`ISNULL`函数处理可能的NULL值问题,在Access中则使用`IIF`函数进行类似的处理。 **SQL原始查询示例:*...

    SQL集合函数中case when then 使用技巧

    在SQL中,`CASE WHEN THEN` 语句用于条件判断,它可以用来转换或过滤数据,尤其是在聚合函数中,如 `COUNT()`, `SUM()`, `AVG()` 等。这个表达式允许我们在一个查询中根据不同的条件执行不同的操作。 在标题提到的...

    sql中的case用法

    例如,使用 Case 函数可以统计亚洲和北美洲的人口数量。 ``` SELECT SUM(population), CASE country WHEN '中国' THEN '亚洲' WHEN '印度' THEN '亚洲' WHEN '日本' THEN '亚洲' WHEN '美国' THEN '北美洲' ...

    数据库SQL函数大全

    2. CASE WHEN THEN END: 多条件判断,根据条件返回不同的结果。 3. AND, OR, NOT: 逻辑运算符,用于组合条件。 六、其他函数 1. RAND(): 生成随机数。 2. INSTR(): 查找子字符串在字符串中的位置。 3. LEFT() 和 ...

    SQL经典面试题及答案 CASE

    在这个查询中,CASE语句用于将每个胜利或失败转换为1或0,然后通过SUM函数对每个日期的胜利和失败次数进行求和。 2. **子查询和JOIN操作** 此题目的目标同样是统计胜利和失败的数量,但采用的是子查询和JOIN的方式...

    sql帮助文档函数大全

    - `CASE WHEN...THEN...END`: 更复杂的条件判断,可以根据不同条件返回不同的结果。 6. **窗口函数**(在某些SQL方言中,如SQL Server和PostgreSQL): - `ROW_NUMBER()`: 为每一行分配一个唯一的行号。 - `RANK...

    sql函数集合(具体的讲解函数例子帮助理解)

    它包含众多功能强大的函数,可以帮助用户进行数据查询、更新、分析等操作。本篇将深入讲解SQL中的常见函数,并通过具体实例帮助理解它们的用法。 一、聚合函数 1. COUNT(): 计算表中指定列的行数。例如,`COUNT(*)`...

    sqlserver函数大全

    7. **比较和逻辑函数**:`ISNULL()`检查值是否为NULL并替换,`COALESCE()`返回第一个非NULL的参数,`IF...ELSE...`和`CASE...WHEN...END`用于条件判断。 8. **分析函数**:SQL Server 2005及更高版本引入了窗口函数...

    Oracle中的SUM用法讲解

    在这个查询中,SUM函数与CASE WHEN一起使用,如果`IPTV_NBR`或`ACC_NBR`为空或等于空字符串,那么对应的CASE WHEN表达式结果为0,否则为1。然后,SUM函数将这些1或0相加,得到每组中非空值的数量。 2. SUM字符串...

    SQL 命令 函数大全

    - `CASE WHEN condition THEN result [WHEN ... ELSE result] END`:更复杂的条件判断结构。 8. **窗口函数**: - `ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)`:为每个分区内的行分配唯一的行号。 - `...

    MySql中流程控制函数/统计函数/分组查询用法解析

    `CASE`函数提供了更复杂的条件判断能力,可以进行等值判断或区间判断。 #### 1.2.1 等值判断(Switch Case效果) ```sql -- 查询员工工资,根据部门ID调整显示的工资 SELECT salary AS 原始工资, department_id, ...

    oracle case语句的介绍

    为了统计所有用户的性别分布,我们可以使用 SUM 函数结合 CASE 语句来计算不同性别的人数: ```sql SELECT SUM(CASE WHEN u.sex = 1 THEN 1 ELSE 0 END) AS 男生总数, SUM(CASE WHEN u.sex = 2 THEN 1 ELSE 0 END)...

    SQL经典面试题及答案

    -- 方法一:使用 case when 结合 sum 函数进行分组统计 SELECT rq, SUM(CASE WHEN shengfu = 'ʤ' THEN 1 ELSE 0 END) AS 'ʤ', SUM(CASE WHEN shengfu = '' THEN 1 ELSE 0 END) AS '' FROM #tmp GROUP BY rq; ...

    Oracle SQL 内置函数总结

    - `CASE WHEN...END`: 更复杂的条件判断,可以包含多个条件分支。 5. **聚合函数**: - `COUNT()`: 计算行数。 - `SUM()`: 计算数值列的总和。 - `AVG()`: 计算平均值。 - `MAX()`, `MIN()`: 找到最大值或...

    SQL经典面试题及答案+CASE

    1. **使用`CASE`表达式与`SUM`函数进行聚合:** ```sql SELECT rq, SUM(CASE WHEN shengfu = '胜' THEN 1 ELSE 0 END) AS '胜', SUM(CASE WHEN shengfu = '负' THEN 1 ELSE 0 END) AS '负' FROM #tmp GROUP ...

Global site tag (gtag.js) - Google Analytics