Один запрос MySQL с подсчетом и суммой

Привет, у меня есть таблица SQL, которая выглядит так:

CREATE TABLE IF NOT EXISTS `designerswave_article_visited` (
  `article_visited_article_id` smallint(5) NOT NULL,
  `article_visited_user_id` smallint(5) NOT NULL,
  `article_user_rating` tinyint(1) DEFAULT NULL,
  UNIQUE KEY `article_id` (`article_visited_article_id`,`article_visited_user_id`)
)

И запрос, который выглядит так:

SELECT SUM(article_user_rating) AS total_rating, COUNT(article_visited_user_id) AS hits
FROM article_visited
WHERE article_visited_article_id =1
GROUP BY article_visited_user_id

Моя проблема в том, что рейтинг может быть 0 или NULL, если пользователь не оценил статью. Однако для получения средних оценок мне нужно суммировать все оценки, отличные от 0 или NULL, и разделить на общее количество оценок.

Я мог бы сделать это довольно легко с помощью двух запросов, используя предложение where. Но мне интересно узнать, смогу ли я сделать это с помощью одного запроса. Например, где "article_user_rating> 0" в SUM (). Я уверен, что видел что-то подобное и раньше, но не могу найти по этому поводу документации.


person Rob    schedule 10.03.2010    source источник
comment
Я запутался, вы выбираете конкретный article_visited_article_id (1) и группируете по article_visited_user_id, но комбинация этих двух столбцов является уникальным ключом в таблице, поэтому это означает, что у вас когда-либо появится только одна строка для каждого пользователя. GROUP BY никогда не группирует строки. Что именно вы пытаетесь выбрать? Средний рейтинг той или иной статьи?   -  person Chad Birch    schedule 10.03.2010


Ответы (2)


Вы можете расширить предложение where, но, как сказал Чад, я не уверен, действительно ли это то, что вы хотите:

SELECT SUM(article_user_rating) AS total_rating, COUNT(article_visited_user_id) AS hits
FROM article_visited
WHERE article_visited_article_id =1 and article_user_rating > 0
GROUP BY article_visited_user_id
person David Kanarek    schedule 10.03.2010

Как вы можете прочитать здесь, в MySQL «групповые функции игнорируют значения NULL». Тогда нулевые значения можно игнорировать.

Для агрегатной функции SUM, значение 0 можно просто игнорировать, потому что X+0=X.

person FerranB    schedule 10.03.2010