(编写不易,转载请注明: 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 关键字进行排重统计。
相关推荐
这个查询通过 `SUM` 函数与 `CASE WHEN` 的组合使用,可以轻松地统计出每种订单状态的数量。 ### 拼接字段 在 SQL 中,经常需要将多个字段或值合并成一个字符串。这可以通过使用字符串连接操作符(如 `+` 或 `||`...
- 类似于使用`IF`函数的方法,但使用`CASE WHEN`语句替换`IF`函数。 - 对于每个`download_type_id`的值,使用`CASE WHEN`语句检查是否等于特定的类型ID,如果是,则计数器加1,否则计数器加0。 - 使用`SUM()`函数...
总结来说,通过在 `SUM` 和 `COUNT` 函数中使用 `IF` 或 `CASE WHEN` 判断条件,我们可以更加精细化地处理数据,以满足特定的统计需求。这在数据分析和报表生成中非常实用,能够帮助我们获取更有针对性的信息。理解...
- 在外部查询中使用`SUM`函数对这些字段进行汇总,并使用`COUNT(*)`计算记录数量。 - 对于`zong_ds`字段,使用`ISNULL`函数处理可能的NULL值问题,在Access中则使用`IIF`函数进行类似的处理。 **SQL原始查询示例:*...
在SQL中,`CASE WHEN THEN` 语句用于条件判断,它可以用来转换或过滤数据,尤其是在聚合函数中,如 `COUNT()`, `SUM()`, `AVG()` 等。这个表达式允许我们在一个查询中根据不同的条件执行不同的操作。 在标题提到的...
例如,使用 Case 函数可以统计亚洲和北美洲的人口数量。 ``` SELECT SUM(population), CASE country WHEN '中国' THEN '亚洲' WHEN '印度' THEN '亚洲' WHEN '日本' THEN '亚洲' WHEN '美国' THEN '北美洲' ...
2. CASE WHEN THEN END: 多条件判断,根据条件返回不同的结果。 3. AND, OR, NOT: 逻辑运算符,用于组合条件。 六、其他函数 1. RAND(): 生成随机数。 2. INSTR(): 查找子字符串在字符串中的位置。 3. LEFT() 和 ...
在这个查询中,CASE语句用于将每个胜利或失败转换为1或0,然后通过SUM函数对每个日期的胜利和失败次数进行求和。 2. **子查询和JOIN操作** 此题目的目标同样是统计胜利和失败的数量,但采用的是子查询和JOIN的方式...
- `CASE WHEN...THEN...END`: 更复杂的条件判断,可以根据不同条件返回不同的结果。 6. **窗口函数**(在某些SQL方言中,如SQL Server和PostgreSQL): - `ROW_NUMBER()`: 为每一行分配一个唯一的行号。 - `RANK...
它包含众多功能强大的函数,可以帮助用户进行数据查询、更新、分析等操作。本篇将深入讲解SQL中的常见函数,并通过具体实例帮助理解它们的用法。 一、聚合函数 1. COUNT(): 计算表中指定列的行数。例如,`COUNT(*)`...
7. **比较和逻辑函数**:`ISNULL()`检查值是否为NULL并替换,`COALESCE()`返回第一个非NULL的参数,`IF...ELSE...`和`CASE...WHEN...END`用于条件判断。 8. **分析函数**:SQL Server 2005及更高版本引入了窗口函数...
在这个查询中,SUM函数与CASE WHEN一起使用,如果`IPTV_NBR`或`ACC_NBR`为空或等于空字符串,那么对应的CASE WHEN表达式结果为0,否则为1。然后,SUM函数将这些1或0相加,得到每组中非空值的数量。 2. SUM字符串...
- `CASE WHEN condition THEN result [WHEN ... ELSE result] END`:更复杂的条件判断结构。 8. **窗口函数**: - `ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)`:为每个分区内的行分配唯一的行号。 - `...
`CASE`函数提供了更复杂的条件判断能力,可以进行等值判断或区间判断。 #### 1.2.1 等值判断(Switch Case效果) ```sql -- 查询员工工资,根据部门ID调整显示的工资 SELECT salary AS 原始工资, department_id, ...
为了统计所有用户的性别分布,我们可以使用 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)...
-- 方法一:使用 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; ...
- `CASE WHEN...END`: 更复杂的条件判断,可以包含多个条件分支。 5. **聚合函数**: - `COUNT()`: 计算行数。 - `SUM()`: 计算数值列的总和。 - `AVG()`: 计算平均值。 - `MAX()`, `MIN()`: 找到最大值或...
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 ...