2013-10-30 49 views
0

我是新來的SQL,目前有一個錯誤,如我的sql標題中所述。單組功能錯誤

這是我的SQL查詢:

SELECT APPLICANT.APPNUM,APPLICANT.APPNAME,COUNT(APPLICATION.APPCNAPPNUM) AS "Total No. of Positions Applied" 
FROM APPLICANT,APPLICATION 
WHERE APPLICANT.APPNUM = APPLICATION.APPCNAPPNUM; 

這是CREATE語句:

CREATE TABLE APPLICANT (
appNum  varchar2(10) not null, 
appName  varchar2(70), 
appDOB  date, 
appCity  varchar2(70), 
appStreet  varchar2(70), 
appHouseNum varchar2(10), 
constraint applicant_Pkey primary key (appNum) 
); 

CREATE TABLE APPLICATION (
appcnPosNum  varchar2(10) not null, 
appcnPosStOffrDt date  not null, 
appcnAppNum  varchar2(10) not null, 
appcnDt   date, 
constraint application_Pkey primary key (appcnPosNum, appcnPosStOffrDt, appcnAppNum), 
constraint application_Fkey1 foreign key (appcnPosNum, appcnPosStOffrDt) references 
POSITION(posNum, posStartOfferDt), 
constraint application_Fkey2 foreign key (appcnAppNum) references APPLICANT(appNum) 
); 

能有人給我任何建議,如何解決這個問題?

回答

3

使用GROUP BY,如:

SELECT APPLICANT.APPNUM,APPLICANT.APPNAME,COUNT(APPLICATION.APPCNAPPNUM) AS "Total No. of Positions Applied" 
FROM APPLICANT,APPLICATION 
WHERE APPLICANT.APPNUM = APPLICATION.APPCNAPPNUM 
GROUP BY APPLICANT.APPNUM,APPLICANT.APPNAME 

這是很好也使用INNER JOIN,而不是老同學多個表,如:

SELECT APPLICANT.APPNUM,APPLICANT.APPNAME,COUNT(APPLICATION.APPCNAPPNUM) AS "Total No. of Positions Applied" 
FROM APPLICANT 
INNER JOIN APPLICATION 
ON APPLICANT.APPNUM = APPLICATION.APPCNAPPNUM 
GROUP BY APPLICANT.APPNUM,APPLICANT.APPNAME 
+0

'INNER JOIN'和舊sch多表之間有什麼區別?對於「GROUP BY」子句,是否必須同時使用兩列?我可以只使用一個嗎?只是問^^ –

+0

這取決於你的情況。例如,如果你是GROUP BY州和市,那麼你需要它由STATE和CITY分組,否則你可以按州或城市分組。請參閱鏈接[here](http://www.w3schools.com/sql/sql_groupby.asp)。 – Edper

+0

至於舊學校的多表格與INNER JOIN,前者是隱含的性質,可能會有意想不到的結果,而後者是明確的,因此你不會因爲不愉快的結果。否則,他們將實際上是相同的。這裏是[鏈接](http://stackoverflow.com/questions/5118562/inner-join-vs-multiple-table-names-in-from)進行討論。 – Edper

1

每當你有一個聚合函數(如COUNT)時,你需要在查詢中包含一個GROUP BY子句,該子句包含「SELECT」投影中的所有非聚合字段。對於這個特定的情況下,你需要做到以下幾點:

SELECT APPLICANT.APPNUM,APPLICANT.APPNAME,COUNT(APPLICATION.APPCNAPPNUM) AS "Total No. of  Positions Applied" 
FROM APPLICANT,APPLICATION 
WHERE APPLICANT.APPNUM = APPLICATION.APPCNAPPNUM 
GROUP BY APPLICANT.APPNUM, APPLICANT.APPNAME;