【问题标题】:SQL - How to use SUM and MAX in same query?SQL - 如何在同一查询中使用 SUM 和 MAX?
【发布时间】:2009-08-22 20:16:49
【问题描述】:

我正在使用 MySQL 数据库版本 5.0.41(和 PHP 5.2.6,尽管这可能与这个问题无关)。

我有一个名为 votes 的表,其中包含以下字段:iditem_idvote_value。 每次网站上的用户对某个项目投赞成票时,都会创建一个新行,其中包含相应的 item_id 和一个正数(即 1)。当投票是否定的时,将使用相应的item_id 和一个负数(即-1)创建一行。 我想通过一个查询(如果可能的话)选择得票最多的 item_id。 为此,我首先需要总结每个人item_id 的所有投票(得到一个像 38 或 -14 这样的数字),然后选择该数字的最大值。 我不确定如何为此编写查询。

你能帮忙吗?

谢谢!

【问题讨论】:

  • “票数最多的item_id”是指评分最高的item吧?

标签: database mysql


【解决方案1】:
SELECT item_id, SUM(vote_value) AS sum
FROM votes
GROUP BY item_id
ORDER BY sum DESC
LIMIT 1

【讨论】:

  • 我想我明白了。如果没有 GROUP BY 子句,sql 将简单地选择最高总票数,而不考虑 item_id(无论投票属于哪个项目)。因此,如果我对一个词有 20 票,对另一个词有 40 票,而不是最大总和显示为 40,它将显示为 60 - 因为它没有按任何方式对选票进行分组。谢谢!
【解决方案2】:

你可以这样做:

SELECT item_id, SUM(vote_value) AS total, COUNT(id) AS c
FROM votes
GROUP BY item_id
ORDER BY total DESC, c DESC
LIMIT 1

【讨论】:

  • 谢谢!选择id的计数(即COUNT(id))的目的是什么?
  • MAX 应该是 SUM,你也应该选择 item_id
  • 我误读了您的原始问题,认为如果SUM 相同,则“票数”是决胜局。如果投票数无关紧要,COUNT 在此查询中无用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多