mysql - 在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”之间获得结果,但我得到的计数不正确。任何帮助,将不胜感激。先感谢您。
解决方案
我想你只想要条件聚合:
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'
推荐阅读
- python - Python 的 lambda 列表只取最后一个值
- html - 如何在 Vuejs 中为选项卡使用路由器视图?
- ios - 如何使用 Swift iOS 向 ST17H26 发送自定义蓝牙命令?
- java - 解析后如何获取多个数组元素并将其传递给数据类
- r - 如何通过 purrr::pmap 正确地将参数从 tibble 传递到函数中
- jquery - Jquery 输入值返回 null(未定义)
- orm - 驱动查询模式不会导致 N+1 问题吗?
- ios - 如何在 Swift 中更改 CDMarkdownKit 中的超链接颜色?
- javascript - 将按钮链接到我也创建的另一个页面
- laravel - Undefined index with Laravel