1. 程式人生 > >mysql中聚合函式條件

mysql中聚合函式條件

有個需求,某張表,有個狀態欄位(1:成功,2:失敗,類似這樣的),現要用日期分組統計不同狀態下的數量

先寫了個子查詢:


select aa.logDate,aa.totalLogs 
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=1) pendingLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=2) successLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=3) errorLogs
,(select count(1) from dxp.dxp_handlermodel where aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') and executeStatus=4) callbackErrorLogs
from
(
select
DATE_FORMAT( a.startTime, '%Y-%m-%d') logDate,
count(1) totalLogs
from dxp.dxp_handlermodel a 
group by DATE_FORMAT( a.startTime, '%Y-%m-%d') 
) aa 


執行相當慢,想到count中能不能加條件,找了一下,如下:

select
DATE_FORMAT( startTime, '%Y-%m-%d') logDate,
count(1) totalLogs,
count(if(executeStatus=1,true,null)) pendingLogs,
count(if(executeStatus=2,true,null)) successLogs,
count(if(executeStatus=3,true,null)) errorLogs,
count(if(executeStatus=4,true,null)) callbackErrorLogs
from dxp.dxp_handlermodel
group by DATE_FORMAT( startTime, '%Y-%m-%d') 

簡明易懂,且執行效率非常高

其它的聚合函式也可以用,如SUM等

居然之前不知道,真不知道當年的報表專案是咋做的,記錄一下

相關推薦

mysql聚合函式條件

有個需求,某張表,有個狀態欄位(1:成功,2:失敗,類似這樣的),現要用日期分組統計不同狀態下的數量 先寫了個子查詢: select aa.logDate,aa.totalLogs  ,(select count(1) from dxp.dxp_handlermodel

MySQL聚合函式count的注意事項

MySQL中有很多函式,包括字串函式、數值執行函式、日期時間函式、聚合函式、加密函式等,這些函式可對SQL語句中的欄位進行處理,但在這裡主要講一下聚合函式count的使用場景。 我們知道,這個函式是用

MySQL聚合函式count的使用和效能優化

本文的環境是Windows 10,MySQL版本是5.7.12-log 一、 基本使用 count的基本作用是有兩個: 統計某個列的資料的數量; 統計結果集的行數; 用來獲取滿足條件的資料的數量。但是其中有一些與使用中印象不同的情況,比如

MySQL聚合函式的使用

1.count()函式的使用(1)count(*) 表示計算表中總的行數,不管某列是否有數值或者是為空;    SELECT  COUNT(*)  FROM +TABLE_NAME;(2)count(欄位名稱) 表示計算指定列下總的行數,計算式將忽略空值;    SELECT

Django聚合函式,F表示式和Q表示式詳解

學習聚合函式的準備工作 新建一個專案,在新建一個app,名字隨意,然後在app中的models中定義幾個模型: from django.db import models # Create your models here. class Author(models.Model):

mysql set函式的用法

mysql 中set函式的用法 :當值為空時不進行賦值 update user_user <set> <if test="nickname!=null and nickname!='' "> user_user.nickn

時間篩選查詢小於加一天 mysql date_add 函式

SELECT y.totalIntegral totalIntegral, y.availableIntegral AS availableIntegral, y.CreateDate as CreateDate FROM ( SELECT a.Money AS to

MySQL日期函式的使用

1. MySQL中的日期函式 1.1. 轉DATETIME型別為Date型別 將add_time=2013-01-12 23:23:56轉化為date型別 select * from product where Date(add_time) = '2013-01-12' 1.2. 獲

MYSQL一些函式使用

mysql中函式使用說明,持續更新中...,在使用過程中覺得可以用例子說明的話直接就簡述,希望大家可以補充說明☺ 1.CONCAT:拼接字元的 可以看出這裡concat將所有字元都拼接在一起,但是沒有分隔符,不能先詳細知道是由幾個字元拼接的。【注】當包含null時,查詢結果為null;但是可

MySQL函式

在MySQL中函式分為兩類,系統函式(內建函式)和自定義函式 不管是內建函式還是使用者自定義函式,都是使用select 函式名(引數列表) 內建函式 字串函式 char_length():判斷字串的字元數 length():判斷字串的位元組數(與字符集)

mysqlcount函式和sum函式的用法

mysql中用於統計的二個函式,而這二個函式通常和group by分組函式配合使用 一、count(*)是統計每一組有多少行 count(*)是將返回表格中所有存在的行的總數包括值為null的行。然而count(列名)將返回表格中除去null以外的所有行的總數(有預設值的

MySQLgroup_concat()函式的排序方法

group_concat()函式的引數是可以直接使用order by排序的。666。。下面通過例子來說明,首先看下面的t1表。 比如,我們要檢視每個人的多個分數,將該人對應的多個分數顯示在一起,分數要從高到底排序。可以這樣寫: SELECT username,GROU

MySQL聚合函式查詢

本文主要介紹一些關於聚合函式查詢的語句。 create table `t_grade` ( `id` int , `stuName` varchar (60), `course` varchar

MySQL 函式--------日期函式,字串函式,數學函式,一些其他函式

函式 日期函式 字串函式 數學函式 其他函式 日期函式 函式名稱 描述 current_da

MYSQLcoalesce函式的用法

coalesce():返回引數中的第一個非空表示式(從左向右依次類推); 例如: select coalesce(null,4,5); // 返回4 select coalesce(null,null,3); // 返回3 select coalesce(1,2,3); // 返回1

MySQLGROUP_CONCAT函式長度限制處理/實現行轉列的功能

MySQL提供了一個很方便的函式group_concat可以實現行轉列的功能。 SELECT t.*, (SELECT GROUP_CONCAT(fellow_company_id) v1 FROM t_trade_fellow a WHERE fellow_type = '1' AND a.company_

MySQLgroup_concat函式深入理解

MySQL中group_concat函式 完整的語法如下: group_concat([DISTINCT] 要連線的欄位 [Order BY ASC/DESC 排序欄位] [Separator '分隔符']) 功能:把多條記錄拼成一條。 1.基本查詢 mysql&

mysql索引 mysqlselect 查詢條件隨談

                                            mysql索引 使用索引—編寫程式碼時候儘可能利用索引,不過非常小的表除外。因為表小,忽略表中索引能使表的讀取更為高效。 什麼是索引 資料庫中的索引是某個表中一列或多列值的集合和相應的指

MySQLgroup_concat函式,用符號連線查詢分組裡欄位值

MySQL中group_concat函式 完整的語法如下: group_concat([DISTINCT] 要連線的欄位 [Order BY ASC/DESC 排序欄位] [Separator '分隔符']) 基本查詢 mysql> select * from aa;

mysqlAVG()函式

AVG()函式 1,AVG()函式是求平均值的函式; eg:求張三的平均分 SELECT stuName,AVG(score) FROM t_grade WHERE stuName="張三"; 2,與 GOUPE BY 關鍵字一起使用; eg:根據姓名對每個人求平均分 SE