我很好奇,如果一个SQL语句可以做这样的事情?
我有一张类似这样的表:
name, manufacturer, value
我想根据其他条件的查询列出每个制造商的top x
号码。
例如,
SELECT name, manufacturer, value
from table
where value<100
order by manufacturer
但理想情况下,我希望只返回每个制造商的first 10
。我知道我可以编写一个脚本来解析返回的表并忽略first 10
之后的记录,但有没有办法构建一个可以自动执行的查询?
答案 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;