Один MySQL запрос с подсчетом и суммой - PullRequest
2 голосов
/ 10 марта 2010

Привет, у меня есть таблица 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 (). Я уверен, что я видел что-то подобное, сделанное ранее, но я не могу найти никакой документации по этому вопросу.

Ответы [ 2 ]

2 голосов
/ 10 марта 2010

Вы можете расширить предложение 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
0 голосов
/ 10 марта 2010

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

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

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