6

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

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

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

4

7 回答 7

16

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

支持大多数 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

如果您正在使用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

或者

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

SQLFiddle 演示

于 2012-09-11T09:17:37.863 回答
4
SELECT   Category,max(Price) as Price
FROM     tbProduct
GROUP BY Category

如果您还想检索其他字段以及类别名称,则:

select * 
from  tbProduct T
join   (
         select Category,max(Price) as Price
         from tbProduct
         group by Category)a
on     T.Category=a.Category
and    T.Price=a.Price
于 2012-09-11T09:14:23.063 回答
3
select *
from
(Select *, 
        row_number() over (partition by category order by price desc) rn 
        from products) v
where rn=1
于 2012-09-11T09:18:39.223 回答
2

这应该有效:

SELECT Category, MAX(Price)
FROM Products
GROUP BY Category

这会按每个类别对表格进行分组,并使用MAX聚合函数来获得每个类别的最高价格。

于 2012-09-11T09:14:41.473 回答
1

这是另一种方法,其中 MAX 被视为分析函数(自 SQL Server 2005 起可用)

    Declare @t table(ProductId  int identity, ProductName varchar(100), Category varchar(20), Price numeric(10,2))
    Insert Into @t Select 'Tiger','Beer',12.00
    Insert Into @t Select 'ABC','Beer',13.99
    Insert Into @t Select 'Anchor','Beer',9.00
    Insert Into @t Select 'Apolo','Wine',10.88
    Insert Into @t Select 'Randonal','Wine',18.90
    Insert Into @t Select 'Wisky','Wine',30.19
    Insert Into @t Select 'Coca','Beverage',2.00
    Insert Into @t Select 'Sting','Beverage',5.00
    Insert Into @t Select 'Spy','Beverage',4.00
    Insert Into @t Select 'Angkor','Beer',12.88

SELECT ProductId,ProductName,Category,Price
FROM(
        SELECT
            ProductId
            ,ProductName
            ,Category
            ,Price
            ,CASE WHEN Price =  MAX(Price) OVER(PARTITION BY Category ORDER BY (SELECT 1)) THEN 'Take' ELSE 'Leave' END AS PickUp   

        FROM @t

        )X  WHERE PickUp = 'Take' ORDER BY 1

结果

ProductId   ProductName Category    Price
2           ABC         Beer            13.99
6           Wisky       Wine            30.19
8           Sting       Beverage        5.00
于 2012-09-11T09:38:32.497 回答
1
SELECT   Category,max(Price) as ProdPrice
FROM     tbProduct
GROUP BY Category
于 2012-09-11T09:44:29.830 回答
0
SELECT TOP(7)*,
             Row_number()
               OVER (
                 partition BY category
                 ORDER BY price DESC) rn
FROM   products
ORDER  BY price DESC  
于 2020-10-12T17:45:25.490 回答