马克斯;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
子句中的子查询)都必须有一个别名(名称)。