Как присвоить 0 для количества, если значение не существует в таблице - PullRequest
0 голосов
/ 04 июня 2019

У меня есть таблица рейтингов

      |EMPLOYEE|Rating|
          1       B
          2       B
          3       C
          4      NULL
          5      NULL
          6      NULL

и я хочу получить количество оценок по каждой оценке следующим образом:

         Result set
        |Rating|Count|
           A     0
           B     2
           C     1
           D     0
           E     0

Я использовал этот запрос, но оценки, которых нет в таблице, будут отображаться как нуль

     select rating,count(rating) from table group by rating

Я также использовал этот запрос, который, по сути, является стержнем вышеуказанного набора результатов, но по какой-то причине он показывает 3 строки повторяющихся данных вместо 1

    select (select count(rating) from table where rating = 'E'),(select count(rating) from table where rating = 'D'),(select count(rating) from table where rating = 'C'),(select count(rating) from table where rating = 'B'),(select count(rating) from table where rating = 'A') from table group by rating

1 Ответ

2 голосов
/ 04 июня 2019

Если бы у вас была таблица для присваиваемых рейтингов, то она была бы довольно простой (и гибкой)

, например, рассмотрите: -

Ваша существующая таблица.

DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (employee TEXT, rating text);
INSERT INTO mytable VALUES (1,'B'),(2,'B'),(3,'C'),(4,null),(5,null),(6,null);

Таблица рейтингов.

DROP TABLE IF EXISTS rating;
CREATE TABLE IF NOT EXISTS rating (rating);
INSERT INTO rating VALUES('A'),('B'),('C'),('D'),('E');

Затем: -

SELECT rating.rating, (SELECT count(*) FROM mytable WHERE rating.rating = mytable.rating) FROM rating;

Результат: -

enter image description here

Гибкость

Добавьте несколько новых оценок, например, согласно: -

INSERT INTO rating VALUES('X'),('Y'),('Z');

И затем выполните: -

SELECT rating.rating, (SELECT count(*) FROM mytable WHERE rating.rating = mytable.rating) FROM rating;

, в результате: -

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...