当前位置: 首页 > 知识库问答 >
问题:

JDBC PreparedStatement在Select子句中动态列上具有聚合函数

强金鑫
2023-03-14

我试图提供一个实用程序,在该实用程序中,我可以获得表中每列的最大数据长度。

>

  • 我在列表中有列的列表。
  • 我查看每个列表。
  • 执行下面准备好的语句。

    String sql = "select max(datalength(?)) from Positions"; 
    
    for(Iterate over list of column names) 
     {
         preparedStatement.setString(1, StringUtils.trim(columnName));
         ResultSet rs =  preparedStatement.executeQuery();
         if (rs.next()) {
            int length1 = rs.getInt(1);
            //print column name and max data length
         }
      }
    

    带有max函数的prepared语句似乎不能使用动态列。它给出的值不正确。

    准备好的语句是否可以与select子句中的动态列一起工作。

  • 共有1个答案

    公良奇
    2023-03-14

    试试下面的..

    Select max(length(<column_name>)) as max_length
    
    From <Table_name>; 
    
     类似资料:
    • 问题内容: 我有一个具有以下结构和数据的表: 当我执行以下SQL: 我得到以下结果: 服务器是基于什么决定决定返回吉尔和弗雷德,并排除杰克和汤姆? 我在MySQL中运行此查询。 注意1:我知道查询本身没有任何意义。我正在尝试调试“ GROUP BY”方案的问题。我试图了解用于此目的的默认行为。 注2:我习惯于编写与GROUP BY子句相同的SELECT子句(减去聚合字段)。当我遇到上述行为时,我开

    • 我有一个如下所示的查询 但当我执行上面的sql时,出现了一个错误: 预期结果: 上面的SQL有什么问题?

    • 我知道这个主题已经讨论了类似的问题,我已经看过了答案,但不幸的是,我只是不知道如何应用于这个查询。我知道将'pe.short_name'添加到GROUP BY也不是处理这个问题的最佳方法。非常感谢任何建议。 列'pe.short_name'在select列表中无效,因为它包含在聚合函数或GROUP BY子句中.`

    • 我们有一个表,它将捕获每个的刷卡记录。我正在尝试编写一个查询,以获取今天第一次刷取的非重复员工记录列表。 我们正在列中保存刷卡日期信息。下面是我的查询,它抛出异常。 获取错误: 列“interface.dbo.vwempSwipeDetail.Employee First Name”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 有什么需要帮忙的吗? 提前道谢。

    • 问题内容: 简而言之,我有一个表格,其中除其他外,还包含一个用于时间戳记的列。我想获得具有最新(即最大价值)时间戳的行。目前,我正在这样做: 但是我宁愿做这样的事情: 但是,SQLite拒绝此查询: 该文件证实了这一行为(页面底部): 聚合函数只能在SELECT语句中使用。 我的问题是:是否可以编写查询以获取具有最大时间戳的行,而无需对select进行排序并将返回的行数限制为1?这似乎应该有可能,

    • 问题内容: 在MySQL中,我观察到尽管没有GROUP BY子句,但在SELECT列表中使用AGGREGATE FUNCTION的语句被执行了。如果这样做,其他RDBMS产品(例如SQL Server)将引发错误。 例如,被执行而没有任何错误,并返回col1,col2的第一行值和col3的所有值之和。以上查询的结果是一行。 谁能告诉我为什么MySQL会发生这种情况? 提前致谢!! 问题答案: 这是