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

posted @ 2015-07-07 16:28  MERRU  阅读(6936)  评论(0编辑  收藏  举报