首页 > 解决方案 > 在mysql中使用group by时如何获取条件计数?

问题描述

mysql新手在这里。

我有一个像这样的表(名称:'audit_webservice_aua'):

+---------+------------------------------------------------+-- -----------------+------------------------+
| 审计ID | 设备代码 | 响应状态 | 查询日期
+---------+------------------------------------------------+-- -----------------+------------------------+
| 10001 | 0007756-gyy66-4c6e-a59d-xxxccyyyt1 | 磷 | 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 | 磷 | 2020-05-02 00:02:08.785
| 10005 | 0007756-gyy66-4c6e-a59d-xxxccyyyt1 | 磷 | 2020-05-09 00:03:08.785
| 10006 | 0007756-gyy66-4c6e-a59d-xxxccyyyt2 | 磷 | 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 和日期的结果集。

我写的查询如下:

    选择 DATE_FORMAT(aua.request_date,'%b') 作为月份,
    YEAR(aua.request_date) 作为年份,
     DATE_FORMAT(aua.request_date,'%Y-%m-%d') 作为日期,
    (选择计数(aua.audit_id))作为 total_trans ,
    (select count(aua.audit_id) where aua.response_status 'P') as total_failure ,
    (选择 count(aua.audit_id) where aua.response_status = 'P') as total_successful ,
    aua.device_code 作为 deviceCode
    FROM audit_webservice_aua aua where DATE_FORMAT(aua.request_date,'%Y-%m-%d') 在 '2020-04-16' 和 '2020-07-17' 之间
    按日期分组,设备代码;

在上面的代码中,我试图在“2020-03-02”和“2020-06-06”之间获得结果,但我得到的计数不正确。任何帮助,将不胜感激。先感谢您。

标签: mysqlsql

解决方案


我想你只想要条件聚合:

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'
      

推荐阅读