sql агрегатная функция сервера (сумма) - PullRequest
0 голосов
/ 22 апреля 2020

Скажем, у меня есть такая таблица

|  Person_ID   |    DATE    |   STATUS   |  HOURS  |
----------------------------------------------------
|     001      |   April 3  |     OK     |  3.000  |
|     001      |   April 4  |     BAD    |  3.000  |
|     001      |   April 3  |     BAD    |  4.000  |
|     002      |   April 3  |     OK     |  2.000  | 
|     002      |   April 5  |     BAD    |  3.000  |

, и я хочу достичь чего-то подобного ..

|  Person_ID   |  TOTAL(OK)  | TOTAL(BAD) | OVERALL(OK+BAD)|
------------------------------------------------------------
|     001      |    3.000    |  7.000     |    10.000      |
|     002      |    2.000    |  3.000     |    5.000       |

Я уже делал что-то подобное раньше, но только для отдельных людей Person_ID. В этом случае я попробовал grouping и использовал sum, но на самом деле это не целевой результат, потому что я не могу сгруппировать тот же Person_ID, что и результат, описанный выше.
Я действительно могу достичь этого, но с несколькими запросами API, но я не думаю, что это хорошая практика. Я хочу это только по одному запросу. Извините за плохой английский sh:)

1 Ответ

3 голосов
/ 22 апреля 2020

Попробуйте выполнить следующее с оператором CASE в функции SUM().

select
    Person_Id,
    sum(case when status = 'OK' then hours end) as `TOTAL(OK)`,
    sum(case when status = 'BAD' then hours end) as `TOTAL(BAD)`.
    sum(case when status = 'OK' OR status = 'BAD' then hours end) as `TOTAL(OK + BAD)`
from yourTable
group by
   Person_Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...