如何编写SQL查询获取各活动(AName)对应的最高志愿者积分?
获取每个活动的志愿者最高积分
嘿,针对你要查询每个活动对应志愿者最高积分的需求,结合你提供的表结构,我整理了两种实用的SQL方案,你可以根据实际需求选择:
方案一:仅获取活动名称与对应最高积分
如果只需要知道每个活动的最高积分是多少,这条简洁的SQL就能搞定:
SELECT AName, MAX(POINTS) AS 最高积分 FROM Participate_In GROUP BY AName;
执行后会得到这样的结果:
| AName | 最高积分 |
|---|---|
| A | 10 |
| B | 11 |
方案二:获取最高积分志愿者的完整信息
要是你还想知道是哪个志愿者拿到了该活动的最高积分(注意:如果有多个志愿者积分相同且都是该活动最高,会返回所有符合条件的记录),可以用子查询关联的方式:
SELECT p.* FROM Participate_In p INNER JOIN ( SELECT AName, MAX(POINTS) AS max_points FROM Participate_In GROUP BY AName ) AS max_p ON p.AName = max_p.AName AND p.POINTS = max_p.max_points;
这条语句会返回每个活动中积分最高的志愿者的全部信息,结果如下:
| V_ID | Ename | POINTS | AName |
|---|---|---|---|
| 1001 | Name1 | 10 | A |
| 1003 | Name3 | 11 | B |
小解释一下
GROUP BY AName是把表中的数据按活动名称分组,保证每个活动只生成一条汇总结果MAX(POINTS)专门用来计算每个分组里的积分最大值- 第二种方案先通过子查询找出每个活动的最高积分,再和原表关联匹配,就能拿到对应的志愿者完整信息,适合需要详细记录的场景
内容的提问来源于stack exchange,提问作者Lele
相关产品推荐
相关产品推荐

