最近测试项目数据统计模块,发现自己对group by函数以及联合使用聚合函数的使用其实根本没理解透彻。

前半部分算自己对项目遇到情况的总结,大家可忽略,直接看后半部分关于group by的使用即可!!!

前半部分:

业务逻辑背景:一个任务中,可以导入多个客户信息(包含caseId,号码、姓名等其他信息),客户信息以caseId作为唯一标识,即同一个任务中caseId不能相同,但客户手机号码可以相同。任务可配置自动重播功能(无人接听时,允许重播,重播次数可配置)

在进行呼叫次数统计时,其中一个规则是:同一个任务中,同一caseId的号码多次呼叫,呼叫次数仅计算一次

数据库:customer_profile存储客户信息;callout_session存储外呼记录相关信息,callout_task:存储任务相关信息

字段信息:

  每次电话呼叫唯一标识:session_id

  任务唯一标识:task_id

  场景模板id:dialog_template_id

  系统呼叫号码时间:callout_dial_time

求:某段时间内,某个场景模板中外呼电话总次数

错误sql语句:

select count(case_id) from 
(select distinct(cp.case_id),ct.task_id,cs.session_id from callout_session cs 
join callout_task ct on cs.task_id=ct.task_id
join customer_profile cp on cs.user_id = cp.user_id
where ct.dialog_template_id='1-1016-108'
and callout_dial_time between '2019-03-16 00:00:00' and '2019-04-02 23:59:59'
group by case_id)A;

该sql语句为双重嵌套查询,这里仅分析内层查询,错误原因,在于group by case_id,将所有外呼记录中case_id相同的记录都合并成了一行,不符合规则“同一个任务中,同一caseId的号码多次呼叫,呼叫次数仅计算一次”

而正确语句中group by case_id,task_id即为将同时满足case_id值相同和task_id值相同的数据合并成一行,符合规则“同一个任务中,同一caseId的号码多次呼叫,呼叫次数仅计算一次”

正确sql语句:  

select count(session_id) from
(select ct.task_id,cs.session_id,cp.case_id from callout_session cs 
join callout_task ct on cs.task_id=ct.task_id
join customer_profile cp on cs.user_id = cp.user_id
where ct.dialog_template_id='1-1016-108'
and callout_dial_time between '2019-03-16 00:00:00' and '2019-04-02 23:59:59'
group by task_id,case_id)A

   

后半部分:

1、group by:后接字段名,根据字段对数据进行分组

SQL语句:select task_id,session_id,customer_case_id,callout_connect_status from callout_session where callout_dial_time between '2019-04-01 00:00:000' and '2019-04-03 23:59:59' group by task_id,session_id

    

        表1

1.1、单独使用group by 列名,不与聚合函数联合使用

  group by后面跟一个列名task_id,起到了去重的作用,将task_id值相同的行合并成一行显示

    

      表1.1-1

  group by后面跟两个列名task_id、customer_id:同样是去重作用,将同时满足task_id值相同、customer_id值相同的行合并成一行

    注:这里不是合并task_id值与customer_id值相同的行,博主本人以前在这里就理解错了

    

      表1.1-2

1.2、group by与聚合函数使用

sql语句:select task_id,count(task_id),session_id,customer_case_id,callout_connect_status from callout_session where callout_dial_time between '2019-04-01 9-04-01 00:00:00' and '2019-04-03 23:59:59' group by task_id order by task_id,customer_case_id;

  count(task_id) 这里统计了task_id值相同的行数量,与表1数据进行对比

    

2、order by:对查询结果进行排序,后面跟字段名

    order by 字段名 desc:降序排列

    order by 字段名 asc:升序排列

来源:https://www.cnblogs.com/jingsx/p/10656748.html

mysql_group by与聚合函数、order by联合使用相关推荐

  1. mysql DML操作、关联查询、联合查询、聚合函数使用

    目录 DML操作 关联查询.联合查询 按条件查询.聚合函数使用 DML操作 CREATE DATABASE db2USE db2; CREATE TABLE stu(sid INT PRIMARY K ...

  2. MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询

    文章目录 新增 (Create) 全列插入 指定列插入 查询 (Retrieve) 全列查询 指定列查询 条件查询 关系元素运算符 模糊查询 分页查询 去重:DISTINCT 别名:AS 升序 or ...

  3. 【3 - 查询】Sql Server - 郝斌(计算列、distinct、between、in、top、null、order by、模糊查询、聚合函数[主要是count()函数] )

    课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili ​ 目录 查询(最重要,难度最大) (一)大纲 (二)Scott 表 下载与导入SQ ...

  4. SQLserver总结03(DDL、DML、DCL、查询、top、distinct、order by、聚合函数)

    SQLserver总结(DDL.DML.DCL.查询.top.distinct.order by.聚合函数) use [wx105]; create table Dep ( id int primar ...

  5. hive踩坑笔记 —— 开窗函数为聚合函数时,加order by 与不加 order by的区别

    over()开窗函数前分排序函数和聚合函数两种 当为排序函数,如row_number(),rank()等时,over中的order by只起到窗口内排序作用. 当为聚合函数,如max,min,coun ...

  6. SQL数据分析:sqlzoo官网学习select,where,order by,limit,聚合函数,having,常用函数,窗口函数,表链接,子查询

    SQL数据分析: 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金 ...

  7. 42000[SQL Server]ORDER BY子句中的列无效,该列没有包含在聚合函数或GROUP BY 子句

    [Err] 42000 - [SQL Server]ORDER BY 子句中的列 "t_xxx.inputDate" 无效,因为该列没有包含在聚合函数或 GROUP BY 子 错误 ...

  8. 【4 - 分组】Sql Server - 郝斌(分组group by、过滤having、聚合函数max() / count()、排序order by、select语句的执行顺序)

    课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili ​ 目录 group by(分组) group by a,b 的用法 having( ...

  9. [Hive_11] Hive 的高级聚合函数

    0. 说明 Hive 的高级聚合函数 union all | grouping sets | cube | rollup pv //page view 页面访问量 uv //user view 访问人 ...

最新文章

  1. AI中pass架构设计优化
  2. Linux系统分辨率设置
  3. CDH5离线安装手册
  4. 网页性能优化03-函数防抖
  5. Django(part36)--cookies
  6. 数据结构和算法(02)---字符串(c++)
  7. 顶尖机器学习学习路线,6个月让你的技术成为行业TOP5%
  8. linux 查看主机版本,Linux下如何查看版本信息的方法步骤
  9. 请问投稿中要求上传的author_文章投稿如何做到时间管理?(二)
  10. fat32 linux 打包工具_UbuntuLinux默认安装图形化的压缩工具是File-Roller文件打包器.ppt...
  11. Ubuntu20.04安装qt详细教程
  12. react实现动画电子倒计时组件
  13. 计算机考试多选试题及答案,计算机中级职称考试试题及答案 [2018职称计算机考试WPS_Office多选试题及答案]...
  14. FIR滤波器窗函数设计法——汉明窗设计实例
  15. echarts报表javascript插件简介
  16. Stream流基本使用
  17. [Go实战]简单使用scylladb
  18. 弘辽科技:拼多多改销量是什么意思?
  19. JAVA学习日记DAY09--javaweb的一些简单应用
  20. 被带走的机密文件WP

热门文章

  1. C++win32平台日志类
  2. linux4.14内核,Linux内核4.14.14,4.9.77,4.4.112和3.18.92更新发布
  3. Cloudera Manager 和CDH6.0.1安装,卸载,各步骤截图(此博文为笔者辛苦劳作最终生成的,使用了3个熬到凌晨2~4点的夜晚,外加一个周末完成,请转载时记录转载之处,谢谢)
  4. Centos中git的安装
  5. 3.游戏优化(CCSpriteBatchNode)
  6. caffe使用过程中遇到的问题和解决办法
  7. python文件操作二
  8. 多进程单线程模型与单进程多线程模型之争
  9. Balluff推出刀具识别系统
  10. CCRD_TOC_2008年第2期