Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:查询2个表并按另一个表中的值对结果排序_Sql_Sql Server_Tsql - Fatal编程技术网

SQL:查询2个表并按另一个表中的值对结果排序

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

是否可以选择一条记录的所有评论,并根据另一个表中的总赞成票与反对票比率排序

我想我可能需要使用subselect,但我真的不确定如何或在哪里使用

2个表:

表1[评论]

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)))作为评级