MySql группа запросов по нескольким столбцам и нескольким счетчикам вместе - PullRequest
0 голосов
/ 08 июня 2018

Я очень плохо знаком с SQL и никогда не писал сложных запросов, таких как этот, для которого мне нужна помощь.У меня есть следующая таблица -

    Platform   |   TestSuite  |   TestCase   |   Status    |
    -----------|--------------|--------------|-------------|
    Win 2012   |    TS1       |    TC1       |    PASS     |
    Win 2012   |    TS1       |    TC2       |    PASS     |
    Win 2012   |    TS1       |    TC3       |    FAIL     |
    Win 2012   |    TS1       |    TC4       |    ABORT    |
    Win 2012   |    TS2       |    TC5       |    PASS     |
    Win 2012   |    TS2       |    TC6       |    PASS     |
    Win 2012   |    TS2       |    TC7       |    FAIL     |
    Win 2016   |    TS1       |    TC1       |    PASS     |
    Win 2016   |    TS1       |    TC2       |    PASS     |
    Win 2016   |    TS1       |    TC3       |    FAIL     |
    Win 2016   |    TS1       |    TC4       |    ABORT    |
    Win 2016   |    TS2       |    TC5       |    PASS     |
    Win 2016   |    TS2       |    TC6       |    PASS     |
    Win 2016   |    TS2       |    TC7       |    FAIL     |
    -----------|--------------|--------------|-------------|

Мне нужно написать запрос SQL, чтобы сгенерировать следующий результат

    Platform   |   TestSuite  |   PASS   |   FAIL  |   ABORT  | TOTAL | 
    -----------|--------------|----------|---------|----------|-------|
    Win 2012   |    TS1       |    2     |    1    |     1    |  4    |
    Win 2012   |    TS2       |    2     |    1    |     0    |  3    |
    Win 2016   |    TS1       |    2     |    1    |     1    |  4    | 
    Win 2016   |    TS2       |    2     |    1    |     0    |  3    |

1 Ответ

0 голосов
/ 08 июня 2018

Вы ищете conditional aggregation.Вот один подход с sum и case, который должен работать с большинством баз данных (хотя mysql поддерживает сокращенные версии):

select platform, testsuite, 
    sum(case when status = 'pass' then 1 else 0 end) pass,
    sum(case when status = 'fail' then 1 else 0 end) fail,
    sum(case when status = 'abort' then 1 else 0 end) abort,
    count(*) total
from yourtable
group by platform, testsuite

Или, поскольку вы используете mysql:

select platform, testsuite, 
    sum(status = 'pass') pass,
    sum(status = 'fail') fail,
    sum(status = 'abort') abort,
    count(*) total
from yourtable
group by platform, testsuite
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...