【问题标题】:how to find the Min value among multiple col如何在多个列中找到最小值
【发布时间】:2011-10-06 17:22:36
【问题描述】:

我在我的 DB 3 col 中有一个值,我想在所有这些值中找到一个值,如下所述:表名:MyTable

-----------------------------
--id-- col1-- col2-- col3-
-----------------------------
   1     200    300     400 
   2     100    150     300
   3     800    102     20
   4     80     80       0

我希望 col1 col2 col3 的结果为 = 0 ,这是其中的最小值。 有可能吗!!!!

我的尝试:

select Min(col1, col2 , col3) as Tablemin
from MyTable

【问题讨论】:

  • 返回结果后,您是否可以轻松地在代码中执行此操作?一定要在 SQL 中做吗?

标签: sql database min


【解决方案1】:

ANSI SQL:

select min(col)
from
(
    select col1 [col] from MyTable
    union all
    select col2 from MyTable
    union all
    select col3 from MyTable
)t

【讨论】:

  • 你可以只使用UNION,不需要UNION ALL。
  • 你可以使用UNION,但最好使用UNION ALL,它更快。
【解决方案2】:

如果是MySQL或Oracle,有LEAST()函数:

SELECT LEAST(MIN(col1), MIN(col2), MIN(col3))
       AS MinOfAllColumns
FROM MyTable

然后,CASE 语句可以在大多数 RDBMS 中使用:

SELECT CASE WHEN MIN(col1) <= MIN(col2) AND MIN(col1) <= MIN(col3) 
                THEN MIN(col1)
            WHEN MIN(col2) <= MIN(col3)
                THEN MIN(col2)
                ELSE MIN(col3)            
       END 
       AS MinOfAllColumns
FROM MyTable

这也可以,但使用UNION 方法很难获得其他字段:

SELECT MIN(col) AS MinOfAllColumns
FROM 
  ( SELECT MIN(col1) AS col
    FROM MyTable
  UNION
    SELECT MIN(col2)
    FROM MyTable
  UNION
    SELECT MIN(col3)
    FROM MyTable
  ) AS tmp

【讨论】:

  • 我试过了,但我收到一个错误,说无法识别在 sql server 商业智能中工作的语法是否有适合此应用程序的语法来构建我的查询。
  • @polishchuk:我知道,但不一样。你UNION,然后分组找到MIN。
【解决方案3】:

显示最小值的简单方法是:

string val = textBox2.Text;
DataSet ds;
con.Open();
string str = "SELECT * FROM Add_Rooms WHERE Price >= @price";
cmd = new SqlCommand(str, con);
cmd.Parameters.AddWithValue("@price", val);
SqlDataAdapter da = new SqlDataAdapter(cmd);
ds = new DataSet();
da.Fill(ds, "Add_Rooms");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Add_Rooms";
con.Close(); 

【讨论】:

    【解决方案4】:

    在 SQLITE 中,答案很简单:

    SELECT MIN(MIN(col1), MIN(col2), MIN(col3)) FROM MyTable;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 2019-11-22
      • 1970-01-01
      • 2018-09-03
      • 2012-04-25
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多