我有两张 table 。一个用于员工,另一个用于评级。有些员工被评为其他员工则没有。我正在尝试列出所有有或没有评级值的员工,并从最高评级对他们进行排序。
emp table
empid empName
--------------
1 John
2 Alex
3 Peter
4 Mary
Ratings table
ratingid | customerid | ratingvalue | empid
---------------------------------------------
1 1 4 1
2 6 2 1
3 4 3 3
4 5 5 4
预期输出:
empid | empName | avgrating | ratingcount
---------------------------------------------
1 John 3 2
2 Alex 0 0
3 Peter 3 1
4 Mary 5 1
我试过了
SELECT *, round(AVG(ratingvalue ), 2) as avgrating, count(empid) as ratingcount
FROM emp LEFT JOIN ratings ON emp.empid = ratings.empid ORDER BY `avgrating`
DESC
该查询不会产生我期望的结果。它只给了我一行。
提前致谢
最佳答案
需要分组并将空值合并为 0。
SELECT EmpID, empName,
coalesce(round(AVG(ratingvalue ), 2),0) as avgrating,
coalesce(count(empid),0) as ratingcount
FROM emp
LEFT JOIN ratings
ON emp.empid = ratings.empid
GROUP BY EmpID, EmpName
ORDER BY `avgrating`DESC
关于Mysql Join 显示所有有或没有匹配记录的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203157/