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