2016-09-08 80 views
-2

我能寫一個查詢以最小值和相應值以優化方式返回組?目前我們使用相同的多個查詢。SQL Group by單個查詢中的最小值和相應值

例如: 表中有產品類別,產品名稱,產品ID和價格。我想用min(價格)返回產品類型,但也要返回產品名稱和產品ID。這是在2008年的SQL產品名稱和產品標識不重複

編輯1:增加了輸入和輸出清晰
enter image description here

+1

【溫馨提示詢問了良好的結構化查詢語言(SQL)的問題(http://meta.stackoverflow.com/a/271056/4955425) – sstan

+0

也許你可以寫這樣的查詢。我們應該怎麼知道? – jarlh

+0

添加樣品表數據和預期結果。 – jarlh

回答

0

首先值得注意的是,SQL是一個說明性語言;它聲明瞭一個功能需求,而不是如何解決這個需求(SQL根據統計信息,索引,提示等等被「編譯」爲解釋/執行計劃,然後就是執行的內容。)

也就是說,有些SQL表達式比其他表達式更昂貴。您的案例有一個簡單的解決方案,使用分析功能(又名窗口功能),由於僅掃描表(或適當的索引)一次,因此成本較低。

SELECT 
    * 
FROM 
(
    SELECT 
     *, 
     RANK() OVER (PARTITION BY category ORDER BY price) AS category_price_rank 
    FROM 
     your_table 
) 
    ranked_your_table 
WHERE 
    category_price_rank = 1 
0
SELECT * FROM (
SELECT ProductCatg, ProductName, ProductID, MIN(PRICE), DateOrdered 
FROM YOUR_TABLE 
GROUP BY ProductCatg, ProductName, ProductID, DateOrdered) A 
WHERE A.PRICE = (SELECT MIN(PRICE) 
       FROM YOUR_TABLE 
       WHERE ProductCatg = A.ProductCatg AND ProductName = A.ProductName)