mysql - 将平均评分加入到 MySQL 选择的所有行的末尾

标签 mysql select join average rating

对于每个 bd_comments.commentid(意思是独特的评论),我需要将其他用户提供的所有评分的平均值加入到每个评论行的末尾。

commentrate 表包含每个用户的所有评分,公共(public)键是 comment_id。在评论率中,该字段称为 comment_id,在 bd_comments 中,它仅称为 commentid

我可以让 sql 选择平均值并将其连接到单个行,但我不能让它对所有行都这样做。下面的示例仅返回一个指定了 comment_id 的结果。

select commentrate.comment_id, floor(avg(commentrate.rating)), 
bd_comments.comment, bd_comments.author_id from commentrate, bd_comments 
WHERE commentrate.comment_id= 1

此语句选择特定 commentid 的所有评分的平均值,并返回附加到我需要的其他字段的平均值,但只返回一行。有几个独特的 commentid。我需要一个在评论行末尾有评论平均评分的表格来制作评分最高的页面。

最佳答案

你的模式(我猜是因为你没有提供)

CREATE TABLE bd_comments 
    (
     commentid int , 
     comment varchar(10),
     author_id int
    );

CREATE TABLE commentrate 
    (
     comment_id int , 
     rating int,
     author_id int
    );

INSERT INTO bd_comments
VALUES
(1, "comment 1", 100),
(2, "comment 2", 200),
(3, "comment 3", 300);

INSERT INTO commentrate
VALUES
(1, 3.5, 100),
(2, 4, 100),
(3, 5, 100),
(1, 2.5, 200),
(2, 1, 200);

这里是查询

SELECT cr.comment_id, floor(avg(cr.rating)) rating,c.comment, c.author_id
FROM commentrate cr, bd_comments c
WHERE cr.comment_id = c.commentid
GROUP BY cr.comment_id

输出

| COMMENT_ID | RATING |   COMMENT | AUTHOR_ID |
|------------|--------|-----------|-----------|
|          1 |      3 | comment 1 |       100 |
|          2 |      2 | comment 2 |       200 |
|          3 |      5 | comment 3 |       300 |

demo

关于mysql - 将平均评分加入到 MySQL 选择的所有行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626899/

相关文章:

java - 我在 spring/hibernate 中使用什么 mysql 驱动程序?

java - 两个以相同数据开头的 ArrayList

arrays - 从数组中选择元素,其概率与其值成正比

MySQL - 跨不直接链接的表查询结果

php - CakePHP:添加 DISTINCT 以查找导致关联被省略

php - 数据库条目与输出数据不同

python - 对某个对象进行投票最有效的方法是什么?

php - 使用 JSON 格式的 MYSQL 表示 PHP 中的数据

mysql - 了解加入 : Listing categories without specified product

mysql - perl 数组搜索 mysql 结果