[英]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.