我很好奇一个SQL语句是否可以做这样的事情?
我有一张这样的桌子:

name, manufacturer, value

我想根据对其他条件的查询列出每个制造商的top x编号。
例如,
SELECT name, manufacturer, value
from table
where value<100
order by manufacturer

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

最佳答案

我想这对你有用:

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条记录的方式。

关于mysql - 语句查询表,但基于不同的列限制返回的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9706594/

10-09 05:56