gpt4 book ai didi

sql - MySQL - 如何运行按分数排序结果的 SELECT 查询 - 例如 upvotes - downvotes

转载 作者:可可西里 更新时间:2023-11-01 08:38:24 24 4
gpt4 key购买 nike

我有两个表——文章表和投票表。用户可以投票赞成或反对他们选择的文章(类似于 Reddit)。我在投票表中的字段是:

  • 文章编号
  • 用户编号
  • 投票

vote 字段的值可以是 0 或 1...(如果他们投票反对该文章则为 0,如果他们投票赞成则为 1)。

我想做的是运行一个 SELECT 查询,返回所有得分最高的文章。也就是说,赞成票减去反对票。但是,我完全不知道如何做到这一点。我能够返回所有获得最多赞成票的文章,例如:

-- article table is called "article"
-- vote table is called "user_article_vote"

SELECT article.title, article.summary, COUNT( user_article_vote.vote ) AS votes
FROM article
INNER JOIN user_article_vote ON article.article_id = user_article_vote.article_id
WHERE user_article_vote.vote = '1'
ORDER BY votes

这将返回获得最多赞成票的文章,但是否可以返回获得最高分(赞成票 - 反对票)的文章?

提前致谢。

最佳答案

首先,我会将您的反对票改为 -1 而不是 0。这样数学会更好。

如何将您的 SELECT 语句更改为以下内容:

SELECT article.title, 
article.summary,
SUM( CASE user_article_vote.vote WHEN 0 THEN -1 ELSE 1 END ) AS balance
FROM article
INNER JOIN user_article_vote ON article.article_id = user_article_vote.article_id
ORDER BY balance DESC

这是 MySQL,所以我不知道您是否需要 GROUP BY article.title, article.summary 子句。这总是让我感到困惑。

关于sql - MySQL - 如何运行按分数排序结果的 SELECT 查询 - 例如 upvotes - downvotes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com