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

そして、この表には 3 つしかないと思い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 に答える