1

すべてのbd_comments.commentid(一意のコメントを意味する) について、他のユーザーが各コメントの行の最後に提供したすべての評価の平均に参加する必要があります。

テーブル commentrate は、各ユーザーが行うすべてのレートを保持し、共通キーはcomment_id. コメント率ではフィールドが呼び出されcomment_id、その中bd_commentsでは単に と呼ばれcommentidます。

SQLに平均を選択させて単一の行に結合させることはできますが、すべての行に対してこれを行うことはできません。以下の例では、comment_id が指定されている結果を 1 つだけ返します。

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必要な他のフィールドに添付された平均を返しますが、1 行のみを返します。いくつかのユニークなものがありますcommentid。最高評価のページを作成するには、コメントの行の最後にコメントの平均評価があるテーブルが必要です。

4

1 に答える 1

0

あなたのスキーマ(あなたが提供できなかったので推測しました)

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 |

デモ

于 2013-09-05T03:21:07.290 に答える