从加入MYSQL中选择平均值

时间:2014-11-24 14:27:48

标签: mysql sql

我想在最后一次加入时获得平均值:

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 个答案:

答案 0 :(得分: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 |
 +-----+------------+-------------+----------+--------------+--------------+-----+-------+--------+