【问题标题】:How get conditional count while using group by in mysql?在mysql中使用group by时如何获取条件计数?
【发布时间】:2020-11-24 11:33:05
【问题描述】:

这里是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”之间的结果,但我得到的计数不正确。 任何帮助,将不胜感激。 提前谢谢你。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我认为您只需要条件聚合:

    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'
          
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2016-12-14
      • 2021-09-12
      相关资源
      最近更新 更多