如何在sql中获取行的最小最小值

Posted

技术标签:

【中文标题】如何在sql中获取行的最小最小值【英文标题】:How to get Minimum minimum value of a row in sql 【发布时间】:2021-05-09 17:41:17 【问题描述】:

我想获取 MS SQL 中一行的最小值,如下表所示,我的最小值是 4,它将在输出列中打印 4

Col1 Col2 Col3 Output
6 4 5 4

【问题讨论】:

【参考方案1】:

您可以使用CROSS APPLYMIN,如下所示:

SELECT MIN(x.cols) AS least_ --, MAX(x.cols) AS greatest_
FROM   your_table t
CROSS APPLY ( VALUES ( t.col1 ), ( t.col2 ), ( t.col3 ), ( t.col4 )) AS x ( cols );

【讨论】:

此语句将返回整个表的最小值,而不是每一行。 那么OP就可以使用GROUP BY t.pkcolumn【参考方案2】:

使用 CASE 表达式来实现:

DECLARE @T TABLE( COL1 INT ,COL2 INT ,COL3 INT )
Insert into @T Values(6,4,5)

SELECT CASE WHEN COL1 < COL2 AND COL1 < COL3 THEN COL1 
            WHEN COL2 < COL1 AND COL2 < COL3 THEN COL2 
            WHEN COL3 < COL1 AND COL3 < COL2 THEN COL3 END 
FROM @T

【讨论】:

【参考方案3】:

这里得到了回答: What's the best way to select the minimum value from several columns?

使用CROSS APPLY

SELECT ID, Col1, Col2, Col3, MinValue
FROM YourTable
CROSS APPLY (SELECT MIN(d) AS MinValue FROM (VALUES (Col1), (Col2), (Col3)) AS a(d)) A

SQL Fiddle

【讨论】:

:) 我站在巨人的肩膀上!【参考方案4】:

这也可以使用 nested CASE 表达式来实现,如下所示:

select 
Col1,
Col2,
Col3,
Case 
    When (Col1 > Col2 AND Col1 > Col3 )
        Then Col1
    else 
        Case 
            When (Col2 > Col3)
                Then Col2
            else 
                Col3
        END
END as  Output
from
TableName

【讨论】:

以上是关于如何在sql中获取行的最小最小值的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 获取行的 MIN 值并检查此 MIN 值是不是在行中至少 2 次

db2 sql,如何仅在一张表的同一查询中获取最小值和最大值?

当 SQL 出现最小值或最大值时,如何获取时间戳?

如何在SQL中查询最大值与最小值

SQL:如何在 sql 中找到每组的最小值?

如何在 SQL 中分组和选择最小值