
select Name,avg(Score) as 平均分 from tbl group by Name order by avg(Score) desc
请参考。
如果有帮助到你,请点击采纳。
# mysql不支持其它复杂数据库的类似 rank() over 的排名和统计查询# 只能通过变通的子查询和逻辑计算方式来实现,对于中小数据量可以考虑-- rank 排名实现select inline_rownum, aa, cc, amt, orderid FROM(select# logic_cal 只是实现计数器计算的,每次逐条查询时会对比当前 cc 与 @last_cc 是否相同,如果不同则把当前该列值赋于 @last_cc 并重设计数器 @num := 1,否则计数器自加 @num := @num + 1(case when cc <>@last_cc then concat(@last_cc := cc, @num := 1 ) else concat(@last_cc, @num := @num + 1) end ) logic_cal, @num as inline_rownum, aa, cc, amt, orderidfrom tb_rank,( select @last_cc := '') t, # 初始化 @last_cc 为 '', 如要检查的列(基于计数器统计的列)是int型,则初始化为0varchar型初始化为''( select @num := 0 ) t2 # 初始化@num为0order by cc, orderid asc # 排序的方式会影响@num的生成,因为logic_cal是逐行计算的) twhere inline_rownum <= floor(amt*0.8) #限制条数,取常量值或其他order by cc,orderid asc在mysql中使用group by进行分组后取某一列的最大值,我们可以直接使用MAX()函数来实现,但是如果我们要取最大值对应的ID那么我们需要取得整行的数据该怎么办?
起初搜寻到的资料是这样的:
首先按照 create_time 倒叙排序,然后分组,那么每个分组中排在最上面的记录就是时间最大的记录
但是结果不是这样的,经过搜集资料,得出需要在排序后边加 limit 10000000000
如果不加的话,数据不会先进行排序,通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED *** 作。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)