2

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

我得到的错误是

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

4

2 回答 2

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 支持分析函数)。但这本身就是一个单独的问题。

于 2013-10-18T15:52:36.407 回答
2

如果您的 RDBMS 不是 MySQL,那么您的字段SELECT list也应该aggregates包含在其中GROUP BY list

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

于 2013-10-18T15:53:26.570 回答