如何选择每个类别的最高价格的产品?

Eri*_*ton 5 sql t-sql database sql-server

以下是我的表,其中包含以下项目:

ProductId       ProductName Category        Price
      1            Tiger      Beer          $12.00
      2             ABC       Beer          $13.99
      3            Anchor     Beer          $9.00
      4            Apolo      Wine          $10.88
      5           Randonal    Wine          $18.90
      6            Wisky      Wine          $30.19
      7             Coca     Beverage       $2.00
      8            Sting     Beverage       $5.00
      9             Spy      Beverage       $4.00
     10           Angkor      Beer          $12.88
Run Code Online (Sandbox Code Playgroud)

而且我想我category在这张表中只有三张(我可以在这张表中有很多category).我想category在此表中显示每个产品的最高产品价格.

Joh*_*Woo 13

如果你想获得整排,试试这个,

(支持大多数RDBMS)

SELECT  a.*
FROM    tbProduct a
        INNER JOIN
        (
            SELECT Category, MAX(Price) maxPrice
            FROM tbProduct
            GROUP BY Category
        ) b ON a.category = b.category AND
                a.price = b.maxPrice
Run Code Online (Sandbox Code Playgroud)

如果你正在使用 MSSQL 2008+

WITH allProducts AS
(
SELECT  ProductId,ProductName,Category,Price,
        ROW_NUMBER() OVER (PARTITION BY CATEGORY ORDER BY Price DESC) ROW_NUM
FROM tbProduct
)
SELECT ProductId,ProductName,Category,Price
FROM allProducts
WHERE ROW_NUM = 1
Run Code Online (Sandbox Code Playgroud)

要么

SELECT ProductId,ProductName,Category,Price
FROM    
(
SELECT  ProductId,ProductName,Category,Price,
        ROW_NUMBER() OVER (PARTITION BY CATEGORY ORDER BY Price DESC) ROW_NUM
FROM tbProduct
) allProducts
WHERE ROW_NUM = 1
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示