如何获得带条件的连接的 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。
我正在尝试按项目类型获取用户的平均评分,但包括所有具有评分的用户,无论类型如何。
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。