【问题标题】:Using SQL queries in JDBC to group data在 JDBC 中使用 SQL 查询对数据进行分组
【发布时间】:2013-10-27 12:54:01
【问题描述】:

我只想通过 NetBeans 中的 jdbc 从数据库中获取数据。我有一个表 Hostel,其中属性是 cid、usid、probs、地址、状态,我想按 cid 获取记录及其对应的数字组。我正在使用 count() 函数来计算特定 cid 的记录数。

我正在使用的查询是

rs = stat.executeQuery("select cid, count(cid), address,usid from hostel" 
      + " where status <> 'processed' group by cid having count(cid)<=5"); 

我得到的错误是

您尝试执行的查询不包含指定表达式“地址”作为聚合函数的一部分

【问题讨论】:

    标签: java sql ms-access jdbc


    【解决方案1】:

    如果您的 RDBMS 不是 MySQL,您在 SELECT list 中的字段应该是 aggregates 或者也应该包含在 GROUP BY list 中。

    这与 JDBC 无关,而是大多数 SQL 实现的规则。

    【讨论】:

      【解决方案2】:

      嗯,你的错误信息很清楚,你正在尝试输出不属于 group by 子句的地址。一些数据库,如 MySQL,可以让你解决这个问题(它们只是从值中选择一个),而另一些则不能......

      在 group by 子句中包含所有字段(一种反模式):

      group by cid, address, usid  
      

      或者使用子查询:

      select distinct(h.cid), x.cid_count, h.address, h.usid 
      from hostel h,
      (
        select hh.cid, count(hh.cid) cid_count
        from hostel hh 
        where hh.status <> 'processed' 
        group by hh.cid 
        having count(hh.cid)<=5
      ) x
      where h.cid = x.cid
      

      当然还有许多其他解决方案,特定于每个 DB 的小型专有 SOL 实现细节(例如,由于别名,此子查询可能无法在您的 DB 中工作)等...通常您可以调整查询以实现更好的性能(例如,Oracle 支持analytic functions)。但这本身就是一个单独的问题。

      【讨论】:

      • Thanx 但仍然无法正常工作 现在它显示错误 - java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] FROM 子句中的语法错误。
      • 这正是您应该发布有关您的问题的完整信息的原因。你没有用你的数据库标记你的问题...... stackoverflow 社区无法猜测发生了什么。无论如何,我不确定 Access 是否支持 from 子句中的子查询,但我用 SQL Server 演示了这种技术,它已经足够接近了。 Working example。如果对访问不起作用,多字段分组反模式肯定会起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2017-02-15
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多