如何获得带条件的连接的 mysql 平均值?

How to I get the mysql average of a join with conditions?

我正在尝试按项目类型获取用户的平均评分,但包括所有具有评分的用户,无论类型如何。

SELECT projects.user_id, AVG(ratings.rating) AS avg1
FROM projects
JOIN ratings
ON projects.project_id = ratings.project_id
WHERE projects.type='0'
GROUP BY projects.user_id;

在此先感谢您的帮助。

我得到的类型 0 的输出是:

user_id | avg1
-----------------
11      | 2.25

但我想得到:

user_id | avg1
-----------------
11      | 2.25
12      | 0

因为用户 12 在评级中有一个项目 table 但不是类型 0 我仍然希望它输出 avg1 = 0

类型 1 的输出按预期工作,因为所有具有评级的用户也具有类型 1:

user_id | avg1
-----------------
11      | 4
12      | 2.5

项目 table 是:(只有前 4 个项目在评分中 table)

project_id |user_id | type
--------------------------
51           11       0
52           12       1
53           11       0
54           11       1
55           12       1
56           13       0
57           14       1

评分 table 是:

project_id | rating
-------------------
51           0
51           1
52           4
51           5
52           2
53           3
54           4
52           1.5

使用条件聚合:

SELECT p.user_id, 
       COALESCE(AVG(CASE WHEN p.type = '0' THEN r.rating END), 0) AS avg1
FROM projects p JOIN ratings r
ON p.project_id = r.project_id
GROUP BY p.user_id;

参见demo