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