2015-04-20 18 views
-1

如果这个国家有3种以上的语言,我想要得到这个名字和语言编号。但是我不知道为什么我没有一个单一的群体功能'错误。为什么我没有得到一个单一群体的功能

SELECT C.NAME,COUNT(L.LANGUAGE) 
FROM WORLD.CITY C 
INNER JOIN WORLD.COUNTRYLANGUAGE L ON C.COUNTRYCODE = L.COUNTRYCODE 
WHERE C.COUNTRYCODE = (
    SELECT COUNTRYCODE 
    FROM WORLD.COUNTRYLANGUAGE 
    GROUP BY COUNTRYCODE HAVING COUNT(LANGUAGE) >3) 
GROUP BY NAME; 
DESC WORLD.CITY; 

Name      Null? Type 
----------------------------------------- -------- ---------------------------- 
ID     NOT NULL NUMBER(10) 
NAME      NOT NULL CHAR(35 CHAR) 
COUNTRYCODE     NOT NULL CHAR(3 CHAR) 
DISTRICT     NOT NULL CHAR(20 CHAR) 
POPULATION    NOT NULL NUMBER(10) 
DESC WORLD.COUNTRYLANGUAGE; 

Name      Null? Type 
----------------------------------------- -------- ---------------------------- 
COUNTRYCODE     NOT NULL CHAR(3 CHAR) 
LANGUAGE     NOT NULL CHAR(30 CHAR) 
ISOFFICIAL    NOT NULL VARCHAR2(4000 CHAR) 
PERCENTAGE    NOT NULL FLOAT(126) 
+1

'ifofficial' as a varchar2(4000)?需要4000个字符才能说“是”或“否”? –

+0

我不明白该查询会如何产生该特定错误。你确定这是你正在运行的?查询还有其他问题,但我没有看到聚合问题。 –

+0

我相信这是我得到的错误。有人可以帮忙吗?我需要使用子查询来做到这一点。谢谢。 –

回答

-1

我想你需要IN,还当你的所有选择的元素做了一批具有by子句是组的一部分

SELECT C.NAME,COUNT(L.LANGUAGE) 
FROM WORLD.CITY C 
INNER JOIN WORLD.COUNTRYLANGUAGE L ON C.COUNTRYCODE = L.COUNTRYCODE 
WHERE C.COUNTRYCODE IN (
    SELECT COUNTRYCODE 
    FROM WORLD.COUNTRYLANGUAGE 
    GROUP BY COUNTRYCODE HAVING COUNT(LANGUAGE) >3) 
GROUP BY NAME,COUNT(L.LANGUAGE); 
+0

不是。你需要使用'HAVING'而不是'WHERE' –

+0

好吧,我更新了答案,好抓住 – BrianAtkins

0

您可以改写为:

SELECT C.NAME,COUNT(L.LANGUAGE) 
FROM WORLD.CITY C 
INNER JOIN WORLD.COUNTRYLANGUAGE L ON C.COUNTRYCODE = L.COUNTRYCODE 
GROUP BY C.NAME 
HAVING COUNT(L.LANGUAGE) > 3 
相关问题