2012-03-14 18 views
2

我很好奇,如果一個SQL語句可以做這樣的事情?語句查詢表,但限制返回的行基於不同的列

我的是這樣的一個表:

name, manufacturer, value 

我想列出top x數量基礎上的其他條件的查詢各生產廠家。

例如,

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

但最好我想,比方說,只從每個製造商返回first 10。我知道我可以編寫一個腳本來解析返回的表並忽略first 10之後的記錄,但是有沒有辦法構建一個可以自動執行的查詢?

+0

這10條記錄的標準是什麼?換句話說,指定條件之後的值的排序順序。它是前10個值嗎? – Aerik 2012-03-14 17:17:04

回答

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

以上只會限制總記錄。我想從每個不同的製造商處獲得x。 – 2012-03-14 17:11:30

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位,則需要BY子句中的子查詢更改順序更改查詢如何決定是每個製造商的「第一」10條記錄。

+0

有趣。因此,假設這些類型的查詢最好由腳本處理,而不是SQL本身,這是安全的。上面的代碼是否與MySQL兼容? – 2012-03-14 21:53:19

+0

是的,這與MySQL.I兼容使用此[SQL小提琴](http://sqlfiddle.com/#!2/e6050/9)進行測試。它完全取決於個人情況,最好在SQL中還是在程序中處理。我不確定MySQL如何用這樣的函數執行,因爲我使用SQL-Server,但使用SQL Server,我會在SQL本身內部執行它。爲什麼要處理更多的行,以及爲什麼向你的應用程序發送更多的數據。但最終不能替代測試。選擇最適合您的特定情況的解決方案。 – GarethD 2012-03-14 22:55:28

+0

它只是發生在我身上,你是否也可以通過限制10的內部查詢來做到這一點?就像在外面選擇不同的製造商一樣,將它提供給使用選定製造商的內部查詢並將其拉到10?我在嵌套SELECT的SQL中沒有做太多的工作 – 2012-03-16 18:49:44

相關問題