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

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

Col1 Col2 Col3 Output
6 4 5 4

【问题讨论】:

    标签: sql sql-server row min


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2021-04-17
        相关资源
        最近更新 更多