从第一个表中选择所有结果而不与第二个表匹配

时间:2015-12-22 11:21:37

标签: mysql sql select left-join average

我有2个表,一个是用户表,另一个是具有用户评级

的映射数据的评级表

用户表

user_id |  firstname | lastname
--------------------------------
1       | 1test      | 1test lname
2       | 2test      | 2test lname
3       | 3test      | 3test lname
4       | 4test      | 4test lname
5       | 5test      | 5test lname

评级表

user_id |  rating
------------------
1       |   4
2       |   3
3       |   5
1       |   4

结果我需要在一个查询中使用用户信息进行评级的平均值

user_id |  firstname | lastname      | rating
---------------------------------------------
1       | 1test      | 1test lname   |  4
2       | 2test      | 2test lname   |  3
3       | 3test      | 3test lname   |  5
4       | 4test      | 4test lname   |  0
5       | 5test      | 5test lname   |  0

3 个答案:

答案 0 :(得分:1)

这是您的查询,

SELECT ut.*,AVG(rt.rating)as rating 
FROM user_table ut
INNER JOIN rating_table rt ON ut.user_id = rt.user_id

答案 1 :(得分:1)

这是一个查询,你可以用它来查找所有用户的所有评级的平均值

String.prototype.colorize = function() {
    return this
        .replace(/&([0-9]{1,3})/g, '</span><span style="color: hsl($1, 100%, 50%)">')
        .replace(/(<\/span>)(.*)/g, "$2$1");
};

答案 2 :(得分:1)

使用 LEFT JOIN 用户表中获取所有记录,并匹配 rating 表中的记录。

试试这个:

SELECT u.user_id, 
       u.firstname, 
       u.lastname, 
       AVG(IFNULL(r.rating, 0)) AS rating
FROM `user` u 
LEFT OUTER JOIN rating r ON u.user_id = r.user_id 
GROUP BY u.user_id, u.firstname, u.lastname;