MySQL分组(组内)排序 -- 取前N大(小)数、求中位数


需求:mysql分组排序,1、取最大(小)前N位,2、取中位数

本例以shop_id和cat_id字段共同分组,并对最细粒度的分组cat_id降序排列

原始表: 

 

2、mysql分组排序(含组内排名)

SELECT a.shop_id,a.cat_id, a.price, count(*) as rank

FROM mygoods a

JOIN mygoods b ON a.shop_id=b.shop_id and a.cat_id = b.cat_id AND a.price <= b.price

GROUP BY a.shop_id,a.cat_id, a.price

ORDER BY a.shop_id,a.cat_id asc,a.price desc

;

 如果要求中位数,在上面的基础上,用以下语句进行筛选:

WHERE Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table_Name);

 

注意:上述可根据情况把JOIN 改成 LEFT JOIN

3、结果数据

 

注意:转载请保留原文链接 http://www.cnblogs.com/merru/articles/4626045.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM