2016-09-23 6 views
0

скажем, у меня есть таблица, например, так:SQL имя значение с наибольшим значением в другом столбце

Store | Item | Price 
store01 | Apple | 2.50 
store01 | Pear | 3.00 
store01 | Banana | 3.11 
store02 | Apple | 2.50 
store02 | Pear | 2.00 
store03 | Banana | 3.10 

и я просто хочу запрос, который содержит список всех магазинов и названия наиболее дорогой товар в этом магазине. Так что мне нужно что-то вроде этого:

Store | Item 
store01 | Banana 
store02 | Apple 
store03 | Banana 

Я пытался что-то вроде так:

SELECT "Store", 
     (case when (max ("Price") = "Price") then "Item" end) as "Max price Item" 
FROM Table 
group by "Price","Item","Store"; 

но результат того, что это просто:

Store | Max price Item 
store01 | Apple 
store01 | Pear 
store01 | Banana 
store02 | Apple 
store02 | Pear 
store03 | Banana 

Я бегу на dashDB.

+0

Существуют ли в функции поддержки DashDB окна? –

ответ

1

Следующая следует сделать трюк:

SELECT Store, MAX(Price) FROM Table 
GROUP BY Store 

Или

SELECT 
    b.Store, 
    MAX(b.Price) as MaxPrice, 
    MAX(b.Item) as Item 
FROM Table b 
INNER JOIN (SELECT 
       Store, 
       MAX(Price) as MaxPrice 
      FROM Table 
      GROUP BY Store) a ON 
a.Store = b.Store AND a.MaxPrice = b.Price 
GROUP BY b.Store 

Примеры входов и выходов:

sample_input

sample_output

+0

Привет, я не хочу max (Цена) ... Я хочу имя товара с максимальной ценой –

+0

Обновлено. Пожалуйста, проверьте. –

1

Вы должны использовать этот

SELECT t.Store, 
    t.Item 
FROM Table t 
INNER JOIN 
    (SELECT 
     Store, 
     MAX(Price) AS max_price 
    FROM 
     Table 
    GROUP BY 
     Store 
    ) mt 
ON 
    mt.Store = t.Store 
    AND mt.max_price = t.Price; 

Или другой путь может быть:

SELECT t.Store, 
    t.Item 
FROM Table t 
WHERE (Store, Price) IN 
    (SELECT 
     Store, 
     MAX(Price) AS max_price 
    FROM 
     Table 
    GROUP BY 
     Store 
    ); 
1

Попробуйте с ниже запроса

SELECT Store,Item 
    FROM YourTable T, 
     (SELECT Store,max(Price) MPrice 
     FROM YourTable 
      GROUP BY Store 
     ) AS T1 
    WHERE T1.Store=T2.Store AND T1.Price=T2.MPrice