繁体   English   中英

在JDBC中使用SQL查询对数据进行分组

[英]Using SQL queries in JDBC to group data

我只想通过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"); 

我得到的错误是

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

好吧,您的错误消息很清楚,您正在尝试输出不属于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支持分析功能 但这是一个单独的问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM