gpt4 book ai didi

sql - 从多列中获取最小值和第二最小值的最简单方法是什么(MIN 函数不起作用)?

转载 作者:行者123 更新时间:2023-12-05 05:06:02 28 4
gpt4 key购买 nike

下表来自Teradata数据库

SELECT
sku.Item_id,
sku.Item_length,
sku.Item_width,
sku.Item_heigth,
FROM Category_item sku

Item_id | Item_length | Item_width |Item_heigth
-------------------------------------------
104174 8 6 1
9482763 8 8 8
8434610 8 9 1
2109145 54 34 2
567106 41 41 2
2028731 3 4 3

我想要的最终结果是,

 Item_id | Item_length | Item_width |Item_heigth | MinValue | SecondMinVale
---------------------------------------------------------------------------
104174 8 6 1 1 6
9482763 8 8 8 8 8
8434610 8 9 1 1 8
2109145 54 34 2 2 34
567106 41 41 2 2 41
2028731 3 4 3 3 3

所以我在网上做了一些研究,其中大多数使用带有子查询的 MIN 函数或按分区原始处理。 Min 函数对我不起作用,因为我有三个独立的列。我想从以上三列中获得最小值或至少两个值。

我尝试使用 Least 函数执行子查询或 CTE,但我无法获得第二小的值。我不确定如何为此使用原始分区。

任何有关此的帮助将不胜感激。

非常感谢!

最佳答案

如果没有基于集合的分析函数,您的要求就很困难。我可能会建议取消透视您的数据:

WITH cte AS (
SELECT Item_id, Item_length AS item FROM Category_item UNION ALL
SELECT Item_id, Item_width FROM Category_item UNION ALL
SELECT Item_id, Item_height FROM Category_item
),
cte2 AS (
SELECT Item_id, item,
ROW_NUMBER() OVER (PARTITION BY Item_id ORDER BY item) rn
FROM cte
)

SELECT
t1.Item_id,
t1.Item_length,
t1.Item_width,
t1.Item_height,
MAX(CASE WHEN rn = 1 THEN t2.item END) AS MinValue,
MAX(CASE WHEN rn = 2 THEN t2.item END) AS SecondMinValue
FROM Category_item t1
INNER JOIN cte2 t2
ON t1.Item_id = t2.Item_id
WHERE
t2.rn <= 2
GROUP BY
t1.Item_id,
t1.Item_length,
t1.Item_width,
t1.Item_height;

请注意,使用此类逆透视操作的需要可能严重意味着您的表格应该重新设计,将每个项目的各种测量结果跨而不是跨列存储。

关于sql - 从多列中获取最小值和第二最小值的最简单方法是什么(MIN 函数不起作用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200552/

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