我很好奇一个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/