Mysql 选择max、group by并显示group by子句中不包含的其他列

Mysql 选择max、group by并显示group by子句中不包含的其他列,mysql,group-by,max,Mysql,Group By,Max,简而言之,我在网上找到了一个教程,并遵循以下要点: 我的问题是: 在这种情况下,我如何回应哪种衣服是最贵的衬衫 更新: 对不起,伙计们,我的错。我需要让自己更清楚。我正在寻找的是一个解决方案,它可以显示每个名称最昂贵的位置: name type price Clothing Blouse 34.97 Toy Playstation 89.95 Music Country Tunes 21.55 然

简而言之,我在网上找到了一个教程,并遵循以下要点:

我的问题是: 在这种情况下,我如何回应哪种衣服是最贵的衬衫

更新:

对不起,伙计们,我的错。我需要让自己更清楚。我正在寻找的是一个解决方案,它可以显示每个名称最昂贵的位置:

name         type          price

Clothing    Blouse         34.97

Toy       Playstation      89.95

Music     Country Tunes    21.55

然后以最贵的价格开始降价订购,然后只显示第一个项目

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

您只需按价格订购,并将记录数限制为1,即可找到最昂贵、价值最高的服装

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

正如马特所提到的,如果不止一种产品的价格最高,而你想要所有的产品。您应该包含一个子查询以获取多个

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

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

这将选择整行,其中价格为服装类型中的最大价格

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

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

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

请尝试以下查询:

解决方案1:

解决方案2:

编辑:

注意:如果两种解决方案共享相同的最高价格,则它们可能会提供相同类型的多个产品

如果您严格要求每种类型中最多有一项,则需要在最后一行中再次分组

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

按产品、类型、产品、价格分组


如果多个产品的价格最高,则返回多行。这可能是您想要的行为,也可能不是。如果其他类型的衣服的价格与衣服的最高价格相同,您可能会在结果中得到其他类型的衣服。如果多个产品的价格最高,这将只返回任意挑选的一行。这可能是,也可能不是理想的行为。这几乎就是解决方案。如何获取多行?如果产品比最昂贵的服装更贵,则可能返回不属于服装类型的产品。请检查此查询。看,我添加了两个查询。两者都会给你相同的结果。也可以查看演示@CitronAutobot第一个解决方案似乎是有效的,我不知道如何或为什么-但thnx很多:如果你不知道内部连接是如何工作的,那么它将很难理解。这就是我添加第二个解决方案的原因。你需要了解mysql,如果每种类型中有多个产品的价格最高,那么这些查询都会返回多行。这可能是,也可能不是我们想要的行为。例如,如果一个PlayStation和一个XBox都要89.95英镑,那么该玩具类型将返回两行。是的,你是对的@MattRaines。实际上这是我的意图。我不想忽略第二个项目,在相同类型下具有相同的最高价格。如果真的想忽略第二行,那么需要添加另一个group by作为最后一行。
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
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;
SELECT
    products.name,
    products.type,
    products.price 
FROM
    products
WHERE   (type, price) IN (
        SELECT type, MAX(price) max_price
        FROM products
        GROUP BY type )