【问题标题】:How to I get the mysql average of a join with conditions?如何获得条件连接的 mysql 平均值?
【发布时间】:2021-12-27 22:46:25
【问题描述】:

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

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 在评级表中有一个项目但不是类型 0 我仍然希望它输出 avg1 = 0

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

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

Projects 表是:(评分表中只有前 4 个项目)

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

评分表是:

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

【问题讨论】:

    标签: mysql inner-join average rating conditional-aggregation


    【解决方案1】:

    使用条件聚合:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2012-03-18
      • 1970-01-01
      • 2022-08-14
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多