Как мне подсчитать (*) в запросе SQL все различные значения, основанные на значении в строке? - PullRequest
0 голосов
/ 06 июня 2019

Допустим, я пытаюсь подсчитать количество отдельных групп, которые существуют, где Status = Active в запросе SQL из 2 столбцов (team и team_2).Как бы я это сделал?

Team                Team_2               Nationality     Status
Crystal Palace FC   Everton FC            France        Active
Crystal Palace FC   Everton FC             England      Active
Everton FC          Crystal Palace FC      Ireland    Sacked
Everton FC          Crystal Palace FC      England    Active

В этом сценарии результат будет 2

Ответы [ 2 ]

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

Без более полной спецификации, мы просто догадываемся, что запрос пытается выполнить.

Одна из возможных интерпретаций требования: получить набор значений, которые существуют в столбце team, вдольс набором значений, существующих в столбце team_2, объединить все эти значения в один список, а затем исключить дубликаты из списка и получить количество строк с ненулевыми значениями ...

Чтобы удовлетворить это, мы могли бы сделать что-то вроде этого:

SELECT COUNT(v.team) AS cnt
  FROM ( 
         SELECT t1.team
           FROM mytable t
          WHERE t.status = 'Active'
          UNION
         SELECT t2.team_2
           FROM mytable t2
          WHERE t.status = 'Active'
       ) v

Обратите внимание, что оператор set UNION заставит удалять дублирующиеся значения.Если мы добавим пятую строку ('Foo','Bar','','Active') в таблицу, то мы ожидаем, что этот запрос вернет 4, потому что мы рассчитываем четыре различных значения ...

Существуют другие возможные интерпретации спецификации, и они будутне удовлетворены запросом выше.

0 голосов
/ 06 июня 2019

Ну, вы можете использовать count(distinct):

select count(distinct team)
from t
where status = 'Active';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...