2017-04-04 81 views
0

我是新(非常)在Oracle SQL世界SQL ORACLE - 查詢,顯示的清單,有多少人是在50

我有列名爲藝術家表:id_artist,這位演出,born_date,death_date ,也有一個叫國下面列的表:id_country,COUNTRY_NAME

我必須寫一個查詢,顯示國家的名單,有多少藝術家在50各有一個,像這樣:

國家| ARTIST OVER 50

JAPAN ................ 35

EEUU ................. 47

法國............ 85

我知道了年齡,但我沒有時間去做其餘的查詢。我試圖用clausule count做一些事情,但是我只能得到錯誤信息,比如'缺少表達'或者與羣組有關的問題。

這是我

SELECT COUNTRY_NAME, COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12)), 
FROM ARTISTS A JOIN COUNTRY C ON A.COUNTRY=C.ID_COUNTRY 
HAVING COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12))>50 
GROUP BY COUNTRY_NAME 

我感到非常非常失落試圖做到這一點查詢,正如我之前說的,我做的唯一的事情就是要知道每一個藝術家的年齡查詢

round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12) 

我希望你們中的一些能幫助我。

感謝

+0

GROUP BY在HAVING之前。 – jarlh

+0

在'FROM'之前刪除','。在'擁有'之前放置'group by'。 – JSapkota

+0

是現在@ ZunairFatimi的評論 –

回答

0

使用GROUP BYHAVING條款

試試這個:

SELECT COUNTRY_NAME, COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12)) 
FROM ARTISTS A JOIN COUNTRY C ON A.COUNTRY=C.ID_COUNTRY 
GROUP BY COUNTRY_NAME 
HAVING COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12))>50 
+0

嗨嘗試,感謝您回覆我嘗試這樣做,我仍然有u__u ORA-00936缺少expresion消息:缺少表達00936. 00000 - 「失蹤表達」 –

0
SELECT COUNTRY_NAME, COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12)) 
FROM ARTISTS A JOIN COUNTRY C ON A.COUNTRY=C.ID_COUNTRY 
GROUP BY COUNTRY_NAME 
HAVING COUNT (round(MONTHS_BETWEEN(DEATH_DATE,BORN_DATE)/12))>50 

總有被一種你過得好可用記錄後過濾記錄使用前組。 ...查詢執行計劃會是這樣,它會首先通過應用組得到的記錄,然後才申請having子句來過濾那些結果。

+0

您好,感謝您的答覆我嘗試這一點,我仍然有u__u ORA-00936缺少expresion消息:缺少表達 00936. 00000 - 「失蹤表達」 –

+1

之前還刪除逗號** **從所建議 –