SQL:查询2个表并按另一个表中的值对结果排序
是否可以选择一条记录的所有评论,并根据另一个表中的总赞成票与反对票比率排序 我想我可能需要使用subselect,但我真的不确定如何或在哪里使用 2个表: 表1[评论]SQL:查询2个表并按另一个表中的值对结果排序,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否可以选择一条记录的所有评论,并根据另一个表中的总赞成票与反对票比率排序 我想我可能需要使用subselect,但我真的不确定如何或在哪里使用 2个表: 表1[评论] ID | RecordID | Comment ------------------------------ 1 | 100001 | blah blah 2 | 100202 | another co 3 | 100054 | lorem ips 表2[评级] ID | Co
ID | RecordID | Comment
------------------------------
1 | 100001 | blah blah
2 | 100202 | another co
3 | 100054 | lorem ips
表2[评级]
ID | CommentID | Vote
-------------------------
1 | 1 | 1
2 | 1 | 0
3 | 1 | 1
4 | 3 | 0
5 | 3 | 0
6 | 3 | 0
请注意:“投票”:0=反对票;1=赞成票
另外,我正在使用Microsoft SQL Server
感谢您的帮助:)要将它们从正面评级排序到负面评级,您可以执行以下操作:
SELECT c.id,
c.recordID,
c.comment
FROM comments c
INNER JOIN (
SELECT CommentID,
SUM(CASE WHEN Vote = 0 THEN -1 ELSE 1 END) AS RATING FROM ratings
GROUP BY commentID
) r ON r.commentID = c.id
ORDER BY r.RATING DESC;
请注意,我使用CASE给0的票数的值为-1,否则,10个否定和1个肯定将给出1的评级
此查询不考虑没有分数的评论。如果您希望无分数的评论评分为0,您可以执行以下操作:
SELECT c.id,
c.recordID,
c.comment
FROM comments c
LEFT JOIN (
SELECT CommentID,
SUM(CASE WHEN Vote = 0 THEN -1 ELSE 1 END) AS RATING FROM ratings
GROUP BY commentID
) r ON r.commentID = c.id
ORDER BY COALESCE(r.RATING,0) DESC;
编辑:
要获得比率,请尝试以下操作:
SELECT c.id,
c.recordID,
c.comment,
r.rating
FROM comments c
LEFT JOIN (
SELECT CommentID,
SUM(CASE
WHEN Vote = 1
THEN 1
ELSE 0
END) / (nullif(COUNT(*) * 1.0, 0)) AS RATING
FROM ratings
GROUP BY commentID
) r ON r.commentID = c.id
ORDER BY COALESCE(r.RATING, 0) DESC;
您能提供所需的输出吗?因为您使用了内部联接,所以所有没有投票的注释都不会包含在结果中。这可能不是有意的。@Twinkles。对。我会补充一些参考资料。谢谢你,这是非常有用的。但是,它是否表示为一个比率?据我所知,它只是VotesUp-VotesDown,给出一个非十进制的结果,比如'23'或其他什么。有没有办法使其成为一个比率,例如,如果有2+票和0-票,那么它将是1.00。或者如果有2+票和1-票,则为0.5票,以此类推。Thanks@Kelsey你必须详细说明:零加2减的比率是多少,没有投票的评论的比率是多少?最好是你提供一个数学公式。我在想这样的事情(我没有写这个!)
convert(十进制(5,2),(convert(float,VotesUp)/convert(float,VotesDown)))作为评级