2016-04-13 42 views
1

我需要確定哪個月的條目數最多。我使用TO_DATE函數將日期列格式化爲MONTH。另外,SELECT COUNT(*)與GROUP BY子句的組合我能夠返回所有記錄的月份和計數屬性。SQLPLUS(Oracle) - 獲取GROUPBY的最大數量

但是,我需要能夠只返回COUNT的MAX的一行。 IVE試圖通過添加HAVING子句來做到這一點,但返回一個錯誤。我懷疑我在這裏需要一個子查詢,但我不確定如何去做。

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT 
FROM PET P 
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH') 
HAVING COUNT = MAX(COUNT); 

另一種嘗試:

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT 
FROM PET P 
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH') 
HAVING COUNT(*) = (SELECT MAX(TO_CHAR(P.DATEREGISTERED,'MONTH')) FROM PET P); 

回答

2

與別名的查詢時,您會按月分組和獲取的記錄數的計數和您所檢查的數量是否相同,最大的「日期值」轉換爲一個月的字符串。他們甚至不是同一類型的比較。

您在答案中提供的查詢正確地比較了雙方的計數。

另一種方式重寫查詢將

select * from 
(SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT 
FROM PET P 
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH') order by count(*) desc) 
where rownum=1 

在這裏,我們通過遞減計數的順序,然後從獲得第一排才能在子查詢的記錄。

0

波紋管代碼的工作並返回正確的響應。我不清楚它爲什麼可行,但上面的嘗試(別名)不這樣做。

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT 
FROM PET P 
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH') 
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM PET P GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH')); 
+0

不,它只適用於每個月有不同計數的地方。 OTOH通過cableload回答將總是返回一行,並且只有一個表格引用應該更有效率。 – symcbean