【问题标题】: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 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
      

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多