-2

これらの 2 つのテーブルがある場合:

コミック:

Field          Type                   Comment
comic_id       bigint(10)             unsigned NOT NULL
comic_title    varchar(500)           NULL

評価

Field               Type               Comment
rating_id           bigint(10)         unsigned NOT NULL
comic_id            varchar(250)       NULL
rating              varchar(250)       NULL

ここで、評価に代わってNext&ボタンを押すと最高評価のコミックを返す API を作成したいと考えています。Previous

  1. デフォルトでは、API は最高評価のコミックを返します。次に、次のボタンを押すと、最低平均評価の漫画をどのように計算すればよいですか

  2. ここでも同じことが言えます。戻るボタンを押したときにコミックの最高平均評価を計算するにはどうすればよいですか。

要するに、私はNext previous Button that will show avg rating from rating table on behalf of comic id.

4

2 に答える 2

1

ここから始めてください。ほとんどの場合、あなたの質問は閉じられます....あなたの質問からあなたを助けるために私たちが得ることができる情報があまりないので、サンプルは通常のシナリオに基づいています...

SO に質問を投稿する方法に関するヒントを次に示します。

* SQLFIDDLE デモ

試すサンプル:

select c.comic_id, c.comic_title, 
COUNT(r.comic_id), avg(r.ratings)
from comics c
left join rating r
on r.comic_id = c.comic_id
group by c.comic_id
;

| COMIC_ID | COMIC_TITLE | COUNT(R.COMIC_ID) | AVG(R.RATINGS) |
---------------------------------------------------------------
|      100 |           a |                 3 |              5 |
|      200 |           b |                 4 |            6.5 |
|      300 |           c |                 3 |         5.6667 |
|      400 |           d |                 2 |              8 |

最小平均:

select x.comic_id, x.comic_title,
min(average) from (
select c.comic_id, c.comic_title, 
COUNT(r.comic_id), avg(r.ratings) average
from comics c
left join rating r
on r.comic_id = c.comic_id
group by c.comic_id) x
;

| COMIC_ID | COMIC_TITLE | MIN(AVERAGE) |
-----------------------------------------
|      100 |           a |            5 |

OPのコメントに従って編集:

OPは、最低の評価、2番目に低い評価などをランク付けしたい..最高の評価、2番目に高い..など

このクエリは、variableランク付けに a を使用します。

* SQLFIDDLE デモ

クエリ:

select x.comic_id, x.comic_title,
x.average from (
select (@rank:=@rank+1) as rank, c.comic_id, c.comic_title, 
COUNT(r.comic_id), avg(r.ratings) average
from (select @rank:=0) rk, comics c
left join 
rating r
on r.comic_id = c.comic_id
group by c.comic_id
order by average asc) x
where x.rank = 1
;

| COMIC_ID | COMIC_TITLE | AVERAGE |
------------------------------------
|      100 |           a |       5 |

JOIN に慣れるには、次の記事を参照してください: VISUAL REPRESENTATION OF SQL JOINS

ここに画像の説明を入力

于 2013-01-25T11:51:19.513 に答える
0

簡単にするためにビューを作成します: (評価のないコミックを含めるように更新します)

CREATE VIEW avg_comic_rating AS 
SELECT 
    comics.comic_id, comics.comic_title, COALESCE(AVG(comic_rating), 0.0)AS avg_rating
 FROM
    comics LEFT JOIN comic_rating
ON   (comics.comic_id = comic_rating.comic_id)
GROUP BY comics.comic_id;

次に、ページネーションの制限オフセットを次のように使用します。

select * from avg_comic_rating order by avg_rating desc, comic_title asc limit 0,2;
+----------+-------------+------------+
| comic_id | comic_title | avg_rating |
+----------+-------------+------------+
|        6 | zorro       |     7.5000 |
|        5 | super man   |     7.0000 |
+----------+-------------+------------+
2 rows in set (0.05 sec)


select * from avg_comic_rating order by avg_rating desc, comic_title asc limit 2,2;
+----------+-------------+------------+
| comic_id | comic_title | avg_rating |
+----------+-------------+------------+
|        4 | cat woman   |     4.5000 |
|        2 | he man      |     4.5000 |
+----------+-------------+------------+
2 rows in set (0.00 sec)

参照用の表の内容:

select * from comics;
+----------+-------------+
| comic_id | comic_title |
+----------+-------------+
|        1 | batman      |
|        2 | he man      |
|        3 | she man     |
|        4 | cat woman   |
|        5 | super man   |
|        6 | zorro       |
+----------+-------------+
6 rows in set (0.00 sec)

select * from comic_rating;
+-----------+----------+--------------+
| rating_id | comic_id | comic_rating |
+-----------+----------+--------------+
|         1 |        1 |            2 |
|         2 |        2 |            3 |
|         3 |        3 |            1 |
|         4 |        4 |            4 |
|         5 |        5 |            6 |
|         6 |        6 |            5 |
|         7 |        1 |            5 |
|         8 |        2 |            6 |
|         9 |        3 |            7 |
|        10 |        4 |            5 |
|        11 |        5 |            8 |
|        12 |        6 |           10 |
+-----------+----------+--------------+
12 rows in set (0.00 sec)

select * from avg_comic_rating;
+----------+-------------+------------+
| comic_id | comic_title | avg_rating |
+----------+-------------+------------+
|        1 | batman      |     3.5000 |
|        2 | he man      |     4.5000 |
|        3 | she man     |     4.0000 |
|        4 | cat woman   |     4.5000 |
|        5 | super man   |     7.0000 |
|        6 | zorro       |     7.5000 |
+----------+-------------+------------+
6 rows in set (0.00 sec)
于 2013-01-25T12:10:56.053 に答える