从具有两个变量列的表中选择最大值(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 可以添加两个不同列的表吗?