簡體   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