SQL-запрос: предложение WHERE - PullRequest
3 голосов
/ 09 октября 2011

Моя таблица rating имеет следующую структуру:

RATING (INT 'id', INT 'stars') primary key 'id';

Уже известно, что stars может иметь значение только от 1 до 5.

Ниже приведено возможное содержание моей таблицы:

Пример таблицы 1:

ID  Stars
--  -----
1   5
2   4
3   4
4   4
5   5
6   4
7   4

Пример таблицы 2:

ID  Stars
--  -----
1   1
2   2
3   3
4   2
5   1
6   1
7   1
8   2
9   1

Я запрашиваю свою таблицу следующим запросом:

SELECT stars, count(stars) as count
FROM rating
GROUP BY stars
ORDER BY stars desc;

Пример таблицы 1 Вывод:

stars  count
-----  -----
5      2
4      5

Пример выходной таблицы 2:

stars  count
-----  -----
3      1
2      3
1      5

Моя проблема: Я хочу такой запрос, где вывод отображается ZERO для значения, которого нет в таблице, т. Е.

Для образца таблицы1 я хочу вывод как:

stars  count
-----  -----
5      2
4      5
3      0
2      0
1      0

Для образца таблицы 2 я хочу вывод как:

stars  count
-----  -----
5      0
4      0
3      1
2      3
1      5

Обратите внимание, что известно, что stars может иметь значения только от 1 до 5.


Я пытаюсь запрос (не работает правильно):

SELECT stars, count(stars) as count
FROM rating
WHERE stars in (1,2,3,4,5)
GROUP BY stars
ORDER BY stars desc;

Проблема с предложением where?

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

select s.stars, count(r.stars) as count
from
(
  select 1 as stars
  union all select 2
  union all select 3
  union all select 4
  union all select 5
) s
left join rating r on s.stars = r.stars
group by s.stars
order by s.stars desc

Примерно так

1 голос
/ 09 октября 2011
SELECT s.id, count(r.stars) as starcount
FROM rating r
RIGHT JOIN (SELECT 1 as id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) s
  ON (s.id = r.stars)
GROUP BY s.id
ORDER BY s.id desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...