2017-04-04 32 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

之前还删除逗号** **从所建议 –