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

pes8fvy9  于 2023-08-02  发布在  Mysql
关注(0)|答案(6)|浏览(163)

为了保持简短,我在网上找到了一个教程,并遵循了要点: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

06odsfpq

06odsfpq1#

请尝试以下查询:

方案一:

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 )

查看Demo
编辑:
**注意:**如果maximum价格相同,两种解决方案可能会在同一type下给予多个产品。

如果你严格要求每种类型最多有一个项,那么你需要在最后一行再次group by**。
因此,对于这两种解决方案,最后一行将是:
GROUP BY products.type, products.price

查看演示

bybem2ql

bybem2ql2#

试试这个

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

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

z31licg0

z31licg03#

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

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

字符串

csbfibhn

csbfibhn4#

您可以通过简单地按价格订购来找到最昂贵(价值最高)的服装,并将记录数量限制为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')

7cwmlq89

7cwmlq895#

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

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

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

efzxgjgh

efzxgjgh6#

在bigquery中,它只允许一个匹配WHERE子句中的一个变量。感谢伟大的解释!

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

字符串

相关问题