mysql中Top N的计算

0
在用sql计算类似Best Top N的时候,也就是查看在某些特定的维度下哪些产品卖的最好,比如查看每个月卖的销量前三的产品
 
在sql server中可以用 row number来实现
 
假定表就sales_month,product_id,sales_amount.
 
现在想知道的是,如何在mysql中实现top N的计算。
 
 
谢谢啦
已邀请:
0

冰凌子 2016-06-29 回答

这个是分组排序,我贴个例子你自己看吧SELECT 
  username,
  DATE,
  price 
FROM
  (SELECT 
    username,
    DATE,
    price,
    @rownum := @rownum + 1,-- 序列编号 
    IF (
      @pdept = heyf_tmp.username,
      @rank := @rank + 1,
      @rank := 1
    ) AS rank,
    @pdept := heyf_tmp.username 
  FROM
    (SELECT 
      username,
      DATE,
      price 
    FROM
      test.rr 
    ORDER BY username ASC,-- 这里排序 根据要排的字段
      price DESC) heyf_tmp,
    (SELECT 
      @rownum := 0,  --  这里都是变量赋值
      @pdept := NULL,
      @rank := 0) a) result 
WHERE rank <=N -- N就是topN的意思  就是排序后取N次序以内的数据
0

郑大鹏 2016-06-28 回答

我们知道,在ms sql server中或access中,
若要查询前10条记录,使用top 10即可,
但在mysql中不支持这个写法,它用limit 10。 
 
我们可以利用MySQL中SELECT支持的一个子句——LIMIT——来完成这项功能。 
LIMIT可以实现top N查询,也可以实现M至N(某一段)的记录查询,具体语法如下: 
SELECT * FROM MYTABLE
ORDER BY AFIELD 
LIMIT offset, recnum
其中offset为从第几条(M+1)记录开始,recnum为返回的记录条数。例: 
select * from mytable
order by afield 
limit 2, 5 
即意为从第3条记录开始的5条记
 
0

kitty0802 2016-06-28 回答

testing0628.jpg

这个是sql server里面实现的效果
0

- 取是能力,舍是境界 2016-06-29 回答

这个问题叫分组内排序,你可以搜索下mysql分组内排序,应该有解决方案的。不熟悉mysql就不提供脚本了。

要回复问题请先登录注册