加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-18 10:07:44 所属栏目:编程 来源:网络整理
导读:考虑这个表(从 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.

考虑这个表(从 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(价格)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

解决方法

这是经常出现的最大n组问题.我通常的解决方法在逻辑上等同于@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;

到目前为止,我的解决方案以及此线程上给出的所有其他解决方案都有可能为每个类型的值生成多行,如果多个产品共享相同类型且两者具有相同的最大价格.有办法解决这个问题并打破平局,但你需要告诉我们哪种产品“赢了”以防万一.

您需要一些其他属性,保证在所有行上都是唯一的,至少对于具有相同类型的行.例如,如果具有更高Id值的产品应该获胜,则可以通过以下方式解决问题:

SELECT T1.Id,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;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读