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