2017-05-18 57 views
1

我想了解網絡開發,所以我讓網站與用戶可以在電影上投票的位置相關,並且在查詢我需要的內容時遇到問題。我的表如下所示:2來自一張桌子的外部連接

--rtable-- 
+-----------+------------+------------+ 
| movieid | rating  | userid  | 
+-----------+------------+------------+ 
| 1   | 9   | 27   | 
| 2   | 8   | 27   | 
| 1   | 10   | 31   | 
| 1   | 7   | 42   | 
| 2   | 8   | 31   | 
+-----------+------------+------------+ 
--mtable-- 
+-----------+------------+------------+------------+ 
| movieid | moviename | movielink | director | 
+-----------+------------+------------+------------+ 
| 1   | Foo  | foo.com | bob  | 
| 2   | Bar  | bar.com | steve  | 
+-----------+------------+------------+------------+ 

我想做一個查詢來對電影的名字,電影鏈接,AVG(等級),以及用戶等級(如果存在),由平均下降(評級)

--desiredtable (if userid == 42)-- 
+-----------+------------+------------+------------+ 
| moviename | movielink | avgrating | yourrating | 
+-----------+------------+------------+------------+ 
| Foo  | foo.com | 8.66  | 7   | 
| Bar  | bar.com | 8   | NULL  | 
+-----------+------------+------------+------------+ 

我已經成功地獲得電影名稱+的MovieLink + avgrating與LEFT OUTER JOIN的工作,但我抓我的頭爲如何添加yourrating。我試過在OUTER JOIN上加倍並使用子查詢,但似乎無法使其工作。

這是我到目前爲止,工程

SELECT mtable.moviename, mtable.movielink, ROUND(AVG(rtable.rating), 2) AS avgrating, 
FROM mtable LEFT OUTER JOIN rtable ON rtable.movieid = mtable.movieid GROUP BY mtable.charid ORDER BY AVG(rtable.rating) DESC 

回答

0

你需要加入rtable兩次在mtable,一旦獲得所有收視率的平均,一旦得到用戶的評級。您還需要提供在on子句中過濾r2的用戶標識。 on子句中的篩選條件僅適用於r2,而不適用於整個數據集。

SELECT mtable.moviename, mtable.movielink, ROUND(AVG(r1.rating), 2) AS avgrating, max(r2.rating) as yourrating 
FROM mtable m LEFT OUTER JOIN rtable r1 ON r1.movieid = m.movieid 
LEFT JOIN rtable r2 on r2.movieid=m.movieid and r2.userid=... 
GROUP BY m.movieid, m.moviename, m.movielink 
ORDER BY AVG(r1.rating) DESC 
+0

非常感謝!真的幫助我在這裏。 – EndingLegacy

相關問題