Mysql Join 显示所有有或没有匹配记录的记录

标签 mysql

我有两张 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/

相关文章:

c++ - 在 VS 2012 中使用 mysql 连接器 C++

mysql - 如何在MySQL中显示/获取剩余的 'max_questions'的值?

php - 跨客户端用户的用户身份验证

java - 找出哪一行已被更新/删除 JDBC (ResultSet)

php - 具有 PDO 连接的外部文件不起作用

mysql - Laravel 和阿拉伯弹头

php - 希腊字符编码适用于 HTML,但不适用于 PHP

mysql - 将一列中的子字符串替换为同一行中另一列的值

c# - 如何修复 Entity Framework 中的 system.data 配置问题

MySQL Partition BY RANGE 不适用于主键?