选择max,group by并显示不在group by子句中的其他列

时间:2016-03-04 16:11:05

标签: mysql group-by max

为了简短起见,我在网上找到了一个教程并按照要点进行操作:http://www.tizag.com/mysqlTutorial/mysqlmax.php

SELECT type, MAX(price) FROM products GROUP BY type

我的问题是: 我如何回应哪种“衣服”最贵(在这种情况下是“衬衫”)?

更新

对不起伙计们,我的坏人。我需要让自己更清楚。我正在寻找的是一个解决方案,显示每个“名称”最昂贵的地方:

name         type          price

Clothing    Blouse         34.97

Toy       Playstation      89.95

Music     Country Tunes    21.55

5 个答案:

答案 0 :(得分:2)

尝试以下查询:

解决方案#1:

SELECT 
    products.name,
    products.type,
    products.price 
FROM products 
INNER JOIN 
( 
    SELECT type,MAX(price) max_price
    FROM products 
    GROUP BY type  ) t
ON products.type = t.type
AND products.price = t.max_price;

Demo Here

解决方案#2:

SELECT
    products.name,
    products.type,
    products.price 
FROM
    products
WHERE   (type, price) IN (
        SELECT type, MAX(price) max_price
        FROM products
        GROUP BY type )

See Demo

修改

注意:如果两个解决方案的价格相同type,则这两种解决方案可能会为您提供同一maximum下的多个产品。

如果您严格要求每种类型的最多一个项,那么您需要在最后一行再次 group by

因此,对于这两种解决方案,最后一行将是:

GROUP BY products.type, products.price

See Demo of it

答案 1 :(得分:0)

然后,这将按降价(从最昂贵的价格开始)订购商品,然后只显示第一个商品......

SELECT name, MAX(price) 
FROM products 
WHERE type = 'Clothing'
ORDER BY price DESC
LIMIT 1

答案 2 :(得分:0)

您可以通过简单地订购价格并将记录数量限制为1来找到最昂贵(最高价值)的服装。

SELECT name
FROM products 
WHERE type = 'Clothing'
ORDER BY price DESC 
LIMIT 1

编辑:

正如Matt所说,如果不止一种产品价格最贵,而且你想要它们。您应该包含一个子查询来获取多个。

SELECT name
FROM products 
WHERE type = 'Clothing'
AND price = (SELECT MAX(price)
FROM products 
WHERE type = 'Clothing')

答案 3 :(得分:0)

试试这个

select * 
from product where 
price=(select max(price) 
from product where type='Clothing')

这将选择服装类型中价格最高的整行

答案 4 :(得分:0)

通过此查询,您可以看到所有关系,而不仅仅是服装

SELECT maxPricesPerType.type,maxPricesPerType.maxPrice,priceTypes.name
    FROM
    (
    SELECT type, MAX(price) maxPrice FROM products GROUP BY type
    ) maxPricesPerType
    INNER JOIN 
    (
    SELECT type, price,name FROM products GROUP BY type,price
    ) priceTypes
    ON priceTypes.type = maxPricesPerType.type 
    AND priceTypes.price = maxPricesPerType.maxPrice

这会将您的第一个数组与具有唯一价格类型组合的数组相连接,并显示您所询问的每种类型的最高价格名称。