2016-03-14 13 views
0

對於初學者來說,我是一名SQL新手,所以我沒有知識來問一個簡單的問題,但我會盡我所能。下面是該查詢我試圖讓:Java中的SQL;處理SELECT和GROUP BY的錯誤

query = conn1.prepareStatement(
"select Industry, Ticker, TransDate, min(TransDate), max(TransDate), " + 
"  count(distinct TransDate) as TradingDays, " + 
"  count(distinct Ticker) as TickerCnt, " + 
"  openPrice, closePrice " + 
" from Company left outer join PriceVolume using(Ticker) " + 
" group by Industry " + 
" having TradingDays >= 150 " + 
" order by Industry, Ticker, TransDate"); 
ResultSet rs = query.executeQuery(); 

這裏的錯誤: SQLException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'reedy330.Company.Ticker' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

如果我包括字幕和TransDate在GROUP BY子句,異常不再發生,但ResultSet是空。我試圖做的是有ResultSetSELECT條款中的所有內容作爲元素。我從分配描述中的類似示例查詢構建了這個查詢,這就是爲什麼我不理解它的原因。

這裏是一個冒號粗體數據庫,表名的佈局,按鍵都只是以粗體顯示:

PriceVolume:
Ticker
TransDate
OpenPrice
HighPrice
LowPrice
ClosePrice
Volume
AdjustedGross

Company:
Ticker
Name
Industry
Location

任何想法?

+0

想法是什麼?正如我一次聽到的那樣:這是一個故事,你的問題是什麼?歡迎來到堆棧溢出!這並不意味着鼓勵,但鼓勵明確。 – tmthydvnprt

回答

0

是否需要「sql_mode = only_full_group_by」?

如果不是,改變的sql_mode:

SET sql_mode = ''; 

OR

SET sql_mode = 'STRICT_ALL_TABLES'; 
+0

我不知道這行代碼需要去哪裏,或者如果我需要包含一些東西讓編譯器瞭解「SET」。我也不知道是否有必要。我沒有選擇該模式,這是我猜測的默認值。 –

+0

只需在查詢之前將其作爲單個SQL執行即可。 –

+0

哦,我明白了,好的,我現在就試試。謝謝。 –

0

當你使用group by,一切都在你的select條款必須是一個聚集函數(如minmaxcount等),或者在group by條款中。

您需要在group by子句中包含TickerTransDate

+0

對,我有點想通過試驗和錯誤,如果我包括所有非集合選擇錯誤消失 - 但然後ResutSet是空的。 –

+0

這是一個完全不同的問題。知道爲什麼數據庫表中似乎沒有數據可能超出了堆棧溢出的範圍。 –

+0

數據庫不應該爲空,因爲它專門爲我的班級訪問和繪製數據。那麼看起來查詢是否正確?我會仔細檢查數據庫是否有數據。 –