gpt4 book ai didi

sql - 如何使用SQL MAX函数获取一行的所有字段?

转载 作者:行者123 更新时间:2023-12-04 13:24:58 25 4
gpt4 key购买 nike

考虑此表(来自http://www.tizag.com/mysqlTutorial/mysqlmax.php):

Id     name               type     price 
123451 Park's Great Hits Music 19.99
123452 Silly Puddy Toy 3.99
123453 Playstation Toy 89.95
123454 Men's T-Shirt Clothing 32.50
123455 Blouse Clothing 34.97
123456 Electronica 2002 Music 3.99
123457 Country Tunes Music 21.55
123458 Watermelon Food 8.73

此SQL查询返回每种类型中最昂贵的物品:
SELECT类型,MAX(price)FROM产品GROUP BY类型
Clothing $34.97
Food $8.73
Music $21.55
Toy $89.95

我还想为每行获取属于上述最高价格的字段 id 名称
什么SQL查询将返回这样的表?
Id     name            type      price
123455 Blouse Clothing 34.97
123458 Watermelon Food 8.73
123457 Country Tunes Music 21.55
123453 Playstation Toy 89.95

最佳答案

这是经常出现的greatest-n-per-group问题。我通常的解决方法在逻辑上等效于@Martin Smith给出的答案,但不使用子查询:

SELECT T1.Id, T1.name, T1.type, T1.price 
FROM Table T1
LEFT OUTER JOIN Table T2
ON (T1.type = T2.type AND T1.price < T2.price)
WHERE T2.price IS NULL;

我的解决方案以及到目前为止在该线程上给出的所有其他解决方案,如果一个以上的产品共享相同的类型并且两者的价格相等,则 type的每个值都可能产生多行。有多种方法可以解决这个问题并打破平局,但是您需要告诉我们哪种产品“胜出”,以防万一。

您还需要其他一些属性,这些属性必须保证在所有行中都是唯一的,至少对于具有相同 type的行而言。例如,如果具有更大 Id值的产品获胜,则可以通过以下方式解决平局:
SELECT T1.Id, T1.name, T1.type, T1.price 
FROM Table T1
LEFT OUTER JOIN Table T2
ON (T1.type = T2.type AND (T1.price < T2.price
OR T1.price = T2.price AND T1.Id < T2.Id))
WHERE T2.price IS NULL;

关于sql - 如何使用SQL MAX函数获取一行的所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com