将 Max() 与 GROUP BY 的其他字段一起使用 [重复]

Posted

技术标签:

【中文标题】将 Max() 与 GROUP BY 的其他字段一起使用 [重复]【英文标题】:Using Max() with other field with GROUP BY [duplicate] 【发布时间】:2021-10-03 18:00:30 【问题描述】:

我在 SQL SERVER 中有下表:

CREATE TABLE cats
(
       name VARCHAR(10),
       breed   VARCHAR(25),
       weight decimal(8,2),
       color  VARCHAR(25),
       age int
)
INSERT INTO @cats VALUES('Ashes','Persian',4.5,'Black',5)
INSERT INTO @cats VALUES('Molly','Persian',4.2,'Black',1)
INSERT INTO @cats VALUES('Felix','Persian',5.0,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Smudge','British Shorthair',4.9,'Black',4)
INSERT INTO @cats VALUES('Tigger','British Shorthair',3.8,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Alfie','Siamese',5.5,'Brown',5)
INSERT INTO @cats VALUES('Oscar','Siamese',6.1,'Black',1)
INSERT INTO @cats VALUES('Millie','Maine Coon',5.4,'Tortoiseshell',5)
INSERT INTO @cats VALUES('Misty','Maine Coon',5.7,'Brown',2)
INSERT INTO @cats VALUES('Puss','Maine Coon',5.1,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Smokey','Maine Coon',6.1,'Brown',4)
INSERT INTO @cats VALUES('Charlie','British Shorthair',4.8,'Black',4)

我需要为每个(颜色)选择\查看最古老的猫,以及它的名字。 使用GROUP BY color 非常容易,但问题是当您添加名称时,所有内容都错过了。

我想我应该使用OVER()Partition BYRANK()/DENSE_RANK...我都尝试了它们,但我卡住了。请帮我解决这个问题。

谢谢!

【问题讨论】:

“我都试过了,但我卡住了”——用什么?请说明您到目前为止尝试了什么以及有什么问题 【参考方案1】:

这是一种方法:

select * from (
   select *, row_number() over(partition by color order by age desc) rn from cats
) t where rn = 1

db小提琴here

【讨论】:

【参考方案2】:

另一种方式,使用相关子查询:

拨弄http://sqlfiddle.com/#!18/798bd7/3。


select 
  (select top 1 name from cats c 
    where c.age = tmp.maxage 
          and c.color = tmp.color) name,
  color, 
  maxage
from (
  select color, max(age) as maxage
  from cats
  group by color
) tmp

【讨论】:

【参考方案3】:
SELECT DISTINCT
    color
    , [max] = max(age) over (partition by color)
FROM cats

【讨论】:

以上是关于将 Max() 与 GROUP BY 的其他字段一起使用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 使用group by 并显示其他列max值

15group by子句与聚合函数

mysql 中order by 与group by的顺序

UNION ALL和order by 的关系,group by 和字段的关系,以及MAX函数

SQL --------------- GROUP BY 函数

sql查询中如何用group by查询出完整的一行记录?