[英]How get conditional count while using group by in mysql?
Mysql 新手在這里。
我有一個像這樣的表(名稱:'audit_webservice_aua'):
+---------+------------------------------------+-------------------+------------------------+ | auditId | device_code | response_status | request_date +---------+------------------------------------+-------------------+------------------------+ | 10001 | 0007756-gyy66-4c6e-a59d-xxxccyyyt1 | P | 2020-03-02 00:00:08.785 | 10002 | 0007756-gyy66-4c6e-a59d-xxxccyyyt2 | F | 2020-04-06 00:00:08.785 | 10003 | 0007756-gyy66-4c6e-a59d-xxxccyyyt3 | F | 2020-04-01 00:01:08.785 | 10004 | 0007756-gyy66-4c6e-a59d-xxxccyyyt1 | P | 2020-05-02 00:02:08.785 | 10005 | 0007756-gyy66-4c6e-a59d-xxxccyyyt1 | P | 2020-05-09 00:03:08.785 | 10006 | 0007756-gyy66-4c6e-a59d-xxxccyyyt2 | P | 2020-05-09 01:00:08.785 | 10007 | 0007756-gyy66-4c6e-a59d-xxxccyyyt7 | F | 2020-06-06 02:00:08.785 +---------+------------------------------------+-------------------+------------------------+
每次發出新請求時,上表都會存儲請求 device_code、response_status 和請求時間。
我需要獲取包含兩個給定日期之間每一天的每個 device_code、total_trans、total_successful、total_failure 和日期的結果集。
我寫的查詢如下:
SELECT DATE_FORMAT(aua.request_date,'%b') as month , YEAR(aua.request_date) as year, DATE_FORMAT(aua.request_date,'%Y-%m-%d') as date, (select count(aua.audit_id) )as total_trans , (select count(aua.audit_id) where aua.response_status 'P') as total_failure , (select count(aua.audit_id) where aua.response_status = 'P') as total_successful , aua.device_code as deviceCode FROM audit_webservice_aua aua where DATE_FORMAT(aua.request_date,'%Y-%m-%d') between '2020-04-16' and '2020-07-17' group by dates,deviceCode ;
在上面的代碼中,我試圖獲得“2020-03-02”和“2020-06-06”之間的結果,但我得到的計數不正確。 任何幫助,將不勝感激。 先感謝您。
我認為您只需要條件聚合:
SELECT DATE_FORMAT(aua.request_date,'%b') as month ,
YEAR(aua.request_date) as year,
DATE_FORMAT(aua.request_date, '%Y-%m-%d') as date,
COUNT(aua.audit_id) as total_trans ,
SUM(aua.response_status <> 'P') as total_failure,
SUM(aua.response_status = 'P') as total_successful,
aua.device_code as deviceCode
FROM audit_webservice_aua aua
WHERE DATE_FORMAT(aua.request_date, '%Y-%m-%d') between '2020-04-16' and '2020-07-17'
GROUP BY month, year, date, deviceCode ;
我還建議您將WHERE
子句更改為:
WHERE aua.request_date >= '2020-04-16' AND
aua.request_date >= '2020-07-18'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.