【问题标题】:Select min value from multiple column从多列中选择最小值
【发布时间】:2018-04-17 13:01:32
【问题描述】:

我在数据库中有以下 SCORE 表:

        id | val1 | val2 | val3 | val4 |
        1     40    100    80      90
        2     90     70    90      45
        3     50     60    100     30
        4     20     30    30      40

我想从列 val1、val2 和 val3 中选择最小值,并使用以下代码将其存储在变量中:

int maxVal = 0;
Statement s2 = conn.createStatement();
s2.execute("SELECT min(val1,val2,val3) FROM SCORE");    
ResultSet rs1 = s2.getResultSet(); // 
while ( rs1.next() ){
        maxVal = rs1.getDouble(1);
}  

并出现错误。有没有一种简单的方法可以从表中的多于 1 列中获取最小值?

【问题讨论】:

  • 从分数中选择 min(val1)、min(val2)、min(val3)

标签: java sql database jdbc derby


【解决方案1】:

如果您使用的是 Java 8,您可以像这样从 Java 代码中获取最小值:

Statement stmt = conn.createStatement();  
ResultSet rs = stmt.executeQuery("SELECT min(val1), min(val2), min(val3) FROM SCORE");

if (rs.next()) {
    minValue = DoubleStream.of(
            rs.getDouble(1), rs.getDouble(2), rs.getDouble(3)
    ).min().getAsDouble();
}

如果您使用低于 Java 8 的版本,您可以使用:

if (rs.next()) {
    minValue = Math.min(Math.min(rs.getDouble(1), rs.getDouble(2)), rs.getDouble(3));
}

【讨论】:

  • 仍然显示以下错误:线程“main”中的异常 java.sql.SQLSyntaxErrorException:语法错误:在第 1 行第 25 列遇到“,”。
  • @DonQuixote 我认为这在 SQL 中是不可能的,我完全改变了解决方案检查我的编辑
  • 不。找不到符号 DoubleStream
  • @DonQuixote DoubleStream 存在于 java 8 中,您可以查看我使用 Math.min 的第二个解决方案
【解决方案2】:

我想出了

SELECT MIN(val)
FROM (SELECT MIN(val1) AS val FROM SCORE
      UNION SELECT MIN(val2) FROM SCORE
      UNION SELECT MIN(val3) FROM SCORE)

【讨论】:

  • 我认为这更接近问题实际寻找的内容,尽管如果他们正在寻找一个值或 3 个值,它的措辞方式并不完全清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2013-04-03
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多