你需要的是相当于分析功能DENSE_RANK()
。一种方法做这件事,如果你需要优秀员工的每一项活动
SELECT a.activity_typeid, GROUP_CONCAT(a.userid) userid
FROM
(
SELECT activity_typeid, userid, SUM(activity_weight) activity_weight
FROM table1
-- WHERE ...
GROUP BY userid, activity_typeid
) a JOIN
(
SELECT activity_typeid, MAX(activity_weight) activity_weight
FROM
(
SELECT activity_typeid, userid, SUM(activity_weight) activity_weight
FROM table1
-- WHERE ...
GROUP BY userid, activity_typeid
) q
GROUP BY activity_typeid
) b
ON a.activity_typeid = b.activity_typeid
AND a.activity_weight = b.activity_weight
GROUP BY activity_typeid
另一种方式来模拟DENSE_RANK()
在MySQL中是利用会话变量
SELECT activity_typeid, GROUP_CONCAT(userid) userid
FROM
(
SELECT activity_typeid, userid, activity_weight,
@n := IF(@g = activity_typeid, IF(@v = activity_weight, @n, @n + 1) , 1) rank,
@g := activity_typeid, @v := activity_weight
FROM
(
SELECT activity_typeid, userid,
SUM(activity_weight) activity_weight
FROM table1
-- WHERE ...
GROUP BY activity_typeid, userid
) q CROSS JOIN (SELECT @n := 0, @g := NULL, @v := NULL) i
ORDER BY activity_typeid, activity_weight DESC, userid
) q
WHERE rank = 1
GROUP BY activity_typeid
输出:
| ACTIVITY_TYPEID | USERID |
|-----------------|---------|
| 8121 | 123,431 |
| 8765 | 431 |
这里是演示两个查询
(詹姆斯)(电话)为什么重复在你的表中? – user4035
对不起,我应该更好地解释一下。每次执行此操作(调用)时,都会在此表中输入一个新条目。所以,他的总积分又增加了50分。所以这不是每个人都说的重复。 – user2656127
现在就来看看,你说詹姆斯有100分的电话= 50 + 50 – user4035