选择最大,分组依据并显示不在分组依据子句中的其他列

Cit*_*bot 5 mysql group-by max

为了简短起见,我在网上找到了一个教程,并紧跟着这一点:http : //www.tizag.com/mysqlTutorial/mysqlmax.php

SELECT type, MAX(price) FROM products GROUP BY type
Run Code Online (Sandbox Code Playgroud)

我的问题是:我该如何回应最昂贵的“衣服”(在本例中为“衬衫”)?

更新:


抱歉,我不好。我需要让自己更清楚。我正在寻找的解决方案是显示每个“名称”最昂贵的位置:

name         type          price

Clothing    Blouse         34.97

Toy       Playstation      89.95

Music     Country Tunes    21.55
Run Code Online (Sandbox Code Playgroud)

100*_*111 6

尝试以下查询:

解决方案#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;
Run Code Online (Sandbox Code Playgroud)

演示在这里

解决方案#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 )
Run Code Online (Sandbox Code Playgroud)

看演示

编辑:


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

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

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

GROUP BY products.type, products.price

看它的演示