【问题标题】:Mysql query sum and find average [closed]Mysql查询总和并找到平均值[关闭]
【发布时间】:2014-01-03 21:38:17
【问题描述】:

我有一个数据库表,用于存储对文章的投票。我想查询该表以查找过去 30 天内平均获得最高总票数的文章。

我正在寻找一些关于我应该如何做到这一点的建议,我猜我可以用 PHP 或 MYSQL 做到这一点。虽然我对 PHP 有更好的理解,但我认为使用 MYSQL 来获得结果是更好的做法。

CREATE TABLE IF NOT EXISTS `ratings` (
  `id` int(11) NOT NULL,
  `article_id` int(11) NOT NULL AUTO_INCREMENT,
  `rating` int(11) NOT NULL,
  `ip` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `timestamp` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2054 ;

在给定这个表结构的情况下,有没有办法求和并找到平均值。

谢谢。

艾伦。

【问题讨论】:

  • SELECT AVG(rating) avgrating FROM ratings GROUP BY article_id WHERE timestamp > DATE_SUB(now(), INTERVAL 30 DAY) ORDER BY avgrating DESC

标签: mysql sum average


【解决方案1】:

MySQL 中有一个函数 AVG()。所以

SELECT AVG(rating) 
FROM ratings
WHERE article_id = 1

将给出article_id为1的文章的平均评分。

MySQL 中还有一个 SUM() 函数。所以

SELECT SUM(rating) 
FROM ratings
WHERE article_id = 1

将给出article_id为1的文章的所有评分的总和。

【讨论】:

  • 非常感谢,我没想到这会比尝试抓取数据并使用 php 脚本对其进行排序更简单直接!
  • 祝你好运!注意:它不会采用值为 NULL 的“评级”字段。因此,如果您有 1、3、5、NULL、10:平均值将为 19/4=4.75,而不是 19/5=3.8。如果您希望它也采用 NULL 字段,您可以使用 SUM()/COUNT() 来实现。但我想你不想那样。 ---EDIT// 没关系,评级是一个非空字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多