日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql_group by与聚合函数、order by联合使用

發(fā)布時間:2024/9/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql_group by与聚合函数、order by联合使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近測試項目數據統(tǒng)計模塊,發(fā)現自己對group by函數以及聯(lián)合使用聚合函數的使用其實根本沒理解透徹。

前半部分算自己對項目遇到情況的總結,大家可忽略,直接看后半部分關于group by的使用即可!!!

前半部分:

業(yè)務邏輯背景:一個任務中,可以導入多個客戶信息(包含caseId,號碼、姓名等其他信息),客戶信息以caseId作為唯一標識,即同一個任務中caseId不能相同,但客戶手機號碼可以相同。任務可配置自動重播功能(無人接聽時,允許重播,重播次數可配置)

在進行呼叫次數統(tǒng)計時,其中一個規(guī)則是:同一個任務中,同一caseId的號碼多次呼叫,呼叫次數僅計算一次

數據庫:customer_profile存儲客戶信息;callout_session存儲外呼記錄相關信息,callout_task:存儲任務相關信息

字段信息:

  每次電話呼叫唯一標識:session_id

  任務唯一標識:task_id

  場景模板id:dialog_template_id

  系統(tǒng)呼叫號碼時間: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相同的記錄都合并成了一行,不符合規(guī)則“同一個任務中,同一caseId的號碼多次呼叫,呼叫次數僅計算一次”?

而正確語句中group by case_id,task_id即為將同時滿足case_id值相同和task_id值相同的數據合并成一行,符合規(guī)則“同一個任務中,同一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 列名,不與聚合函數聯(lián)合使用

  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) 這里統(tǒng)計了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联合使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。