2014-11-24 44 views
1

我試圖得到最後的平均連接選擇平均:從加入MYSQL

INNER JOIN rating r 
    ON r.rid = (SELECT MAX(rid) FROM rating WHERE uid = u.uid ORDER BY rid DESC LIMIT 1) 

我有得到它給我一個評級,1位小數像排名4.3的一些問題。我怎樣才能以簡單的方式做到這一點?

SELECT p.uid, u.name, u.description, u.url, u.picurl, u.mapurl, p.pid, p.price, r.rid, r.rating FROM utested u 
INNER JOIN price p 
    ON p.pid = (SELECT MAX(pid) FROM price WHERE uid = u.uid ORDER BY uid DESC LIMIT 1) 
INNER JOIN rating r 
    ON r.rid = (SELECT MAX(rid) FROM rating WHERE uid = u.uid ORDER BY rid DESC LIMIT 1) 
ORDER BY u.name; 

我已經創建了一個sql小提琴,因此您可以嘗試查詢。 http://sqlfiddle.com/#!2/93b771/1

+1

請說明您的要求痘痘更 – 2014-11-24 14:39:44

+1

小提琴是偉大的,但他們只真正意義的時候,我們可以看到期望的結果。 – Strawberry 2014-11-24 14:45:39

+0

我有UTESTED表,我註冊了很多酒吧。用戶可以在酒吧裏發佈啤酒價格。 他們也可以評分酒吧。但我不能得到所有收視率爲1的UID得到平均值,然後顯示在我的查詢中的消息 – 2014-11-24 14:47:31

回答

1

請考慮以下事項。這個結果與期望的結果有什麼不同?

+-----+------------+-------------+----------+------------+--------------+-----+-------+-----+--------+ 
| uid | name  | description | url  | picurl  | mapurl  | pid | price | rid | rating | 
+-----+------------+-------------+----------+------------+--------------+-----+-------+-----+--------+ 
| 5 | Havana Pub |    |   |   |    | 35 | 74 | 11 |  5 | 
| 3 | Hos Naboen |    |   |   |    | 33 | 74 | 9 |  5 | 
| 2 | Javel  | Musikk  | javel.no | pic.jave.. | map.javel.no | 38 | 88 | 8 |  5 | 
| 1 | Kick  | Yay   | kick.no | http://p.. | map.kick.no | 31 | 74 | 15 |  1 | 
| 6 | Leopold |    |   |   |    | 36 | 74 | 12 |  5 | 
| 4 | Victoria |    |   |   |    | 37 | 75 | 10 |  5 | 
+-----+------------+-------------+----------+------------+--------------+-----+-------+-----+--------+ 

好的。我要帶刺野在這裏暗...

SELECT p.uid 
     , u.name 
     , u.description 
     , u.url 
     , u.picurl 
     , u.mapurl 
     , p.pid 
     , p.price 
     , AVG(r.rating) rating 
    FROM utested u 
    JOIN price p 
    ON p.uid = u.uid 
    JOIN (SELECT uid, MAX(pid) latest_price FROM price GROUP BY uid) px 
    ON px.uid = p.uid 
    AND px.latest_price = p.pid 
    JOIN rating r 
    ON r.uid = u.uid 
    GROUP 
    BY u.name; 
+-----+------------+-------------+----------+--------------+--------------+-----+-------+--------+ 
| uid | name  | description | url  | picurl  | mapurl  | pid | price | rating | 
+-----+------------+-------------+----------+--------------+--------------+-----+-------+--------+ 
| 5 | Havana Pub |    |   |    |    | 35 | 74 | 5.5000 | 
| 3 | Hos Naboen |    |   |    |    | 33 | 74 | 4.0000 | 
| 2 | Javel  | Musikk  | javel.no | pic.javel... | map.javel.no | 38 | 88 | 5.0000 | 
| 1 | Kick  | Yay   | kick.no | http://pri.. | map.kick.no | 31 | 74 | 3.4000 | 
| 6 | Leopold |    |   |    |    | 36 | 74 | 3.5000 | 
| 4 | Victoria |    |   |    |    | 37 | 75 | 4.0000 | 
+-----+------------+-------------+----------+--------------+--------------+-----+-------+--------+ 
+0

在錢上!這正是我想要的! 現在我怎麼能得到1評分的小數? 除此之外,我很開心,真的很喜歡stackoverflow! – 2014-11-24 16:42:03

+0

查看ROUND()!!! – Strawberry 2014-11-24 16:44:39