查询表的语句,但限制基于distinct列的返回行

时间:2012-03-14 17:05:08

标签: mysql sql greatest-n-per-group

我很好奇,如果一个SQL语句可以做这样的事情?

我有一张类似这样的表:

name, manufacturer, value

我想根据其他条件的查询列出每个制造商的top x号码。

例如,

SELECT name, manufacturer, value 
from table 
where value<100 
order by manufacturer

但理想情况下,我希望只返回每个制造商的first 10。我知道我可以编写一个脚本来解析返回的表并忽略first 10之后的记录,但有没有办法构建一个可以自动执行的查询?

2 个答案:

答案 0 :(得分:2)

我认为这对你有用:

SET @Manufacturer = '';
SET @RowNum = 1;

SELECT  Name,
        Manufacturer,
        Value
FROM    (   SELECT  @RowNum := IF(@Manufacturer = Manufacturer, @RowNum + 1, 1) AS RowNumber,
                    Manufacturer,
                    Name,
                    Value,
                    @Manufacturer := Manufacturer
            FROM    Item
            ORDER BY Manufacturer, Name DESC
        ) Item
 WHERE  RowNumber <= 10 

这将返回按名称排序的前10个,您需要更改子查询中的order by子句,以更改查询如何决定每个制造商的“第一”10条记录。

答案 1 :(得分:0)

SELECT name,manufacturer,value
FROM YOURTABLE 
LIMIT 0,x;