2013-01-25 166 views
-2

發稿表明如果有這2個表:計算平均評分在下次上一個按鈕

COMICS

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

RATING

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

現在我想創建一個返回頂級評論的漫畫的API Next & Previous按鈕代表評級。

  1. 默認情況下,API返回評價最高的漫畫。然後在按下一個按鈕我應該如何計算最低平均評級漫畫

  2. 同樣在這裏我將如何計算按下後退按鈕的漫畫的最高平均評級。

總之我想創建一個Next previous Button that will show avg rating from rating table on behalf of comic id

+0

請正確解釋自己。這是一個非常令人困惑的問題 – cjds

+4

聽起來不錯。當你陷入某處時,繼續回到這裏 –

+0

SQL和按鈕在一個問題中沒有多大意義 – Bulat

回答

1

這裏是東西給你下手,但最有可能您的問題將被關閉....樣本是基於通常的情況下,因爲沒有太多的信息,我們可以搶來幫助你從你的問題了.. 。

這裏是關於How to post a question on SO的尖端。

* SQLFIDDLE DEMO

樣品嚐試:

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 | 

編輯AS PER OP的評論:

OP要評級的最低評級,排名第二低ð等..最高等級,第二位..等

這個查詢將使用variable排名。

* SQLFIDDLE DEMO

查詢:

select x.comic_id, x.comic_title, 
x.average from (
select (@rank:[email protected]+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

enter image description here

+0

如果我想取出下一個最低評價comic_id? &如果我想取出以前的最高評價comic_id,該怎麼辦? –

+0

@UmairAkhtar你想排名他們的最低,次低等?最高也一樣? =) – bonCodigo

+0

如果comic_id在comic_rating表中沒有記錄怎麼辦?我想顯示這些漫畫記錄以及0評分 –

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) 
+0

非常感謝..我有一個問題在這裏:如果comic_id在comic_rating表中沒有記錄怎麼辦?我想顯示這些漫畫記錄以及0評級 –

+0

@UmairAkhtar很好的捕獲;因爲您需要更改視圖創建語句。修改了帖子中的DDL。 – SparKot