Java 在JDBC中使用SQL查询对数据进行分组
我只想通过NetBeans中的jdbc从数据库中获取数据。我有一个表hotel,其中的属性是cid、usid、probs、address、status和我想通过cid获取记录及其对应的编号组。我正在使用count函数计算特定cid的记录数 我使用的查询是Java 在JDBC中使用SQL查询对数据进行分组,java,sql,ms-access,jdbc,Java,Sql,Ms Access,Jdbc,我只想通过NetBeans中的jdbc从数据库中获取数据。我有一个表hotel,其中的属性是cid、usid、probs、address、status和我想通过cid获取记录及其对应的编号组。我正在使用count函数计算特定cid的记录数 我使用的查询是 rs = stat.executeQuery("select cid, count(cid), address,usid from hostel" + " where status <> 'processed' gro
rs = stat.executeQuery("select cid, count(cid), address,usid from hostel"
+ " where status <> 'processed' group by cid having count(cid)<=5");
我得到的错误是
您试图执行的查询不包括作为聚合函数一部分的指定表达式“address”
好的,您的错误消息非常清楚,您试图输出的地址不是GROUPBY子句的一部分。有些数据库(如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
当然,还有很多其他的解决方案,每个数据库都有一些专有的SOL实现细节,例如,由于别名等原因,这个子查询可能无法在您的数据库中工作。。。通常,您可以调整查询以获得更好的性能,例如Oracle支持。但这是一个单独的问题。您的错误消息非常清楚,您试图输出的地址不是GROUPBY子句的一部分。有些数据库(如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
当然,还有很多其他的解决方案,每个数据库都有一些专有的SOL实现细节,例如,由于别名等原因,这个子查询可能无法在您的数据库中工作。。。通常,您可以调整查询以获得更好的性能,例如Oracle支持。但这是一个单独的问题。如果您的RDBMS不是MySQL,则选择列表中的字段应该是聚合字段,或者也应该包含在分组列表中
这与JDBC无关,而是大多数SQL实现的规则。如果您的RDBMS不是MySQL,则选择列表中的字段应该是聚合字段,或者也应该包含在分组列表中
这与JDBC无关,只是大多数SQL实现的规则。Thanx但现在仍然不起作用,它在FROM子句中显示了错误-java.SQL.SQLException:[Microsoft][ODBC Microsoft Access Driver]语法错误。这正是您应该发布有关问题的完整信息的原因。你没有用数据库标记你的问题。。。stackoverflow社区无法猜测到底发生了什么。无论如何,我不确定Access是否支持from子句中的子查询,但我用SQL Server演示了这项技术,它非常接近engough。如果它对access不起作用,则“按多个字段分组”反模式肯定会起作用。Thanx但现在仍然不起作用。它在FROM子句中显示错误-java.sql.SQLException:[Microsoft][ODBC Microsoft access Driver]语法错误。这正是您应该发布有关问题的完整信息的原因。你没有用数据库标记你的问题。。。stackoverflow社区无法猜测到底发生了什么。无论如何,我不确定Access是否支持from子句中的子查询,但我用SQL Server演示了这项技术,它非常接近engough。如果它不适用于access,则“按多个字段分组”反模式肯定会起作用。