马克斯;2个表的平均MYSQL内部联接

马克斯;2个表的平均MYSQL内部联接,mysql,inner-join,Mysql,Inner Join,我有两张表(示例): 用户: ID company_ID 1 7 2 6 3 7 活动奖励: user_ID points activity_type_ID 1 1 7 1 2 7 1 1 7 1 1 8 2 1 7 2 1 7 2

我有两张表(示例):

用户:

ID    company_ID
1     7
2     6
3     7
活动奖励:

user_ID    points    activity_type_ID
1          1         7
1          2         7
1          1         7
1          1         8
2          1         7
2          1         7
2          2         8
2          1         7
3          2         7
3          1         7
3          2         8
3          1         8
(也有公司和活动类型的表格,但它们在这里不相关)

我需要一个MYSQL查询,该查询将对每个用户
的总分进行求和,其中
所有用户都有某个
公司ID
,对于某个
活动类型ID
,它将返回所有用户分总和的
MAX
AVG

例如,我有:

SELECT SUM(activity_rewards.points) AS totalpoints, 
  MAX(activity_rewards.points) AS maxpoints, 
  AVG(activity_rewards.points) AS avgpoints 
FROM activity_rewards
INNER JOIN users 
  ON activity_rewards.user_ID = users.ID 
WHERE ( (users.company_ID = "7") && (activity_rewards.activity_type_ID LIKE '8') )
在示例查询中,只涉及3个结果。它们是:

user_ID    points    activity_type_ID
1          1         8
3          2         8
3          1         8
我想得到:

  • 用户1得1分
  • 用户3得3分
  • 最大值为3,平均值为2

相反,我得到的最大值是2,平均值是1.33。结果与您的查询一致,但您的查询不符合您的要求

您的查询将计算相关记录中的最大点和平均点。但是,您似乎希望通过用户id获得最大值和平均值

这意味着您需要计算子查询中每个用户的点数之和,然后在外部查询中计算最大值和平均值

SELECT SUM(sumpoints) as totalpoints, max(sumpoints) as maxpoints, avg(sumpoints) as avgpoints
FROM
    (SELECT users.ID, SUM(activity_rewards.points) AS sumpoints
    FROM activity_rewards
    INNER JOIN users ON activity_rewards.user_ID = users.ID 
    WHERE users.company_ID = 7 and activity_rewards.activity_type_ID = 8
    GROUP BY users.ID) t
这样做:

SELECT MAX(sum_points) max, AVG(sum_points) avg, SUM(sum_points) sum_all FROM (SELECT SUM(t2.points) sum_points FROM users t1 JOIN activity_rewards t2 ON (t1.ID = t2.user_ID) WHERE ( (t1.company_ID = "7") AND (t2.activity_type_ID = '8') ) GROUP by t1.ID) as summation

您需要按用户id求和的点的最大值和平均值。谢谢您的帮助。你能告诉我结尾的“t”表示什么吗?它作为别名,类似于totalpoints、maxpoints和avgpoints(使用
as
是可选的)。每个派生表(from
子句中的子查询)都必须有一个别名(名称)。