2015-04-20 20 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 
相關問題