Как получить условный счет при использовании group by in mysql? - PullRequest
1 голос
/ 04 августа 2020

Mysql newb ie здесь.

У меня есть таблица (имя: '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», но счетчик im получение не правильно. Любая помощь будет оценена. Заранее спасибо.

1 Ответ

0 голосов
/ 04 августа 2020

Я думаю, вам просто нужна условная агрегация:

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'
      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...