形成一个选择两个字段最大差异的SQL查询

时间:2010-03-12 03:13:42

标签: sql mysql

我正在尝试选择效率最高的唱片。每个记录都有一个id,upvotes(int)的数量和MySQL数据库中downvotes(int)的数量。

我知道基本更新,选择,插入查询,但我不确定如何形成如下所示的查询:

SELECT * 
  FROM topics 
 WHERE MAX(topic.upvotes - topic.downvotes)

4 个答案:

答案 0 :(得分:3)

可能有超过1条记录符合该条件。为了得到它们,你可以在mysql中做这样的事情:

SELECT * 
  FROM topics 
 WHERE upvotes - downvotes = (select MAX(upvotes - downvotes) from topics)

答案 1 :(得分:2)

  SELECT (upvotes-downvotes) AS NetVotes, *
  FROM topics
  ORDER BY NetVotes DESC LIMIT 1

答案 2 :(得分:2)

您没有使用MAX()。

这是非常快的查询:

SELECT id, (upvotes - downvotes) AS popular  
FROM topics 
ORDER BY popular DESC LIMIT 1

要运行更新:

UPDATE topics, 
    (here you put your select statement from above in parenthesis ) AS popular_query
SET topic.description = "I'm popular"
WHERE topics.id = popular_query.id

我刚把它放在一张有250,000条记录的桌子上(它非常相似 - 库存使用情况 - 寻找最受欢迎的部分)并且耗费了.203秒 - 在我的开发机器上 - 这甚至不是生产服务器(其中它tppl 0.016秒;

<强>更新

是的,我没想到你可能有多个顶级成绩的可能性。

SELECT GROUP_CONCAT(id) AS popular_ids, (upvotes - downvotes) AS popular 
FROM topics 
GROUP BY popular ORDER BY popular DESC  LIMIT 1

popular_ids - 将包含常用记录作为文本字段,如果需要,可以轻松解析。

答案 3 :(得分:1)

这是否适合你呢?

SELECT *
FROM topics
ORDER BY topic.upvotes - topic.downvotes DESC
LIMIT 1;