Подсчитать несколько столбцов с помощью Group By и Union All? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть запрос, в котором я хочу подсчитать значения 3 столбцов s, s2 и s3 и использовать Группу По значениям столбца s?

До сих пор я сделал это db-fiddle

Это даст мне вывод

1 - count 3  
2 - count 3  
4 - count 4

Это почти правильно, но я также хочу включить правильное предложение Where, чтобы счетчик был только там, где сезона = '2018 /2019 'и раунд = 34.

Требуемый вывод должен быть:

1 - count 3  
2 - count 2  
4 - count 2

Есть идеи, как отредактировать этот запрос, чтобы предложение Where работало в подсчитанных значениях?

С уважением,

Arie

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Вы должны расширить объединенные запросы, включив сезон и раунд, и добавить условия в предложение where:

SELECT t.s, COUNT(*) as count FROM (
    SELECT s, season, round FROM tablename UNION all
    SELECT s2, season, round FROM tablename UNION all
    SELECT s3, season, round FROM tablename
) as t 
WHERE 
  t.s IN (
    SELECT s FROM tablename
    WHERE season = '2018/2019' 
      AND round = 34
      AND s is not null
  )
  AND t.season = '2018/2019' 
  AND t.round = 34
  AND t.s is not null
GROUP BY t.s
ORDER BY count DESC, t.s

См. Демоверсию .
Результаты:

| s   | count |
| --- | ----- |
| 1   | 3     |
| 2   | 2     |
| 4   | 2     |
0 голосов
/ 24 июня 2019

Вы должны отфильтровать строки для каждой таблицы в объединении

SELECT t.s, COUNT(*) as count FROM (
SELECT s 
FROM tablename 
WHERE season = '2018/2019'  and round = 34
UNION all
SELECT s2 
FROM tablename 
WHERE season = '2018/2019' and round = 34
UNION all
SELECT s3 
FROM tablename
WHERE season = '2018/2019' and round = 34
) as t 
GROUP BY t.s
ORDER BY count DESC
...