从具有两个变量列的表中选择最大值(microsoft SQL)

Posted

技术标签:

【中文标题】从具有两个变量列的表中选择最大值(microsoft SQL)【英文标题】:selecting max value from table with two variable colums (microsoft SQL) 【发布时间】:2020-12-22 15:45:02 【问题描述】:

我正在使用如下所示的表格:

开始 https://i.stack.imgur.com/uibc3.png

我想要的结果是这样的:

结果 https://i.stack.imgur.com/v0sic.png

所以我正在尝试从两个“组合”列中选择最大值。如果值相同(C 部分),则结果无关紧要。 我尝试按最大值对表格进行排序,然后使用 distinct,但结果并没有达到预期

您能否为此提供解决方案或一些见解?提前致谢!

【问题讨论】:

看看 row_number() 和窗口函数。 提示:不使用图片的原因是here。 样本数据最好显示为formatted text。请参阅here,了解有关如何创建漂亮表格的一些提示。 【参考方案1】:

使用row_number():

select *
from (
    select t.*, row_number() over(partition by part order by amount desc, zone) rn
    from mytable t
) t
where rn = 1

对于每个part,这将为您提供金额最高的行;如果有顶部关系,则使用列zone 来打破它们。

如果您想允许平局,请改用rank(),例如:

rank() over(partition by part order by amount desc) rn

【讨论】:

【参考方案2】:

您可以使用 SUB 查询

来实现此目的
DECLARE @T TABLE(
PART VARCHAR(50),
ZONE VARCHAR(10),
Amt INT)


Insert Into @T Values ('PartA','71H',1),('PartA','75H',2),('PartB','98D',1),('PartB','98A',3),('PartC','75H',1),('PartC','52H',1)

SELECT M.PART,MIN(M.Zone) AS ZONE,S.AMOUNT
FROM @T M
INNER JOIN (
SELECT Part,MAX(Amt) as AMOUNT From @T
GROUP BY PART) S ON S.AMOUNT=M.Amt AND S.PART=M.PART
GROUP BY M.PART,S.AMOUNT
ORDER BY M.PART

【讨论】:

以上是关于从具有两个变量列的表中选择最大值(microsoft SQL)的主要内容,如果未能解决你的问题,请参考以下文章

从具有联合的两个表中选择一列中最大值的所有行

在一个查询Access数据库中从具有不同字段的两个不同表中选择列

Hive:无法在具有 100 个或更多分区列的表中插入数据错误:在最大长度为 767 的列“PART_NAME”中

IN SQL INNER JOIN 可以添加两个不同列的表吗?

将具有 LONG RAW 列的表中的数据从一个数据库复制到另一个数据库

在 mySQL 中,是不是可以从两个表中选择并合并列?