如何在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 APPLY
和MIN
,如下所示:
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 次