单组群组函数错误

10 浏览
0 Comments

单组群组函数错误

我对SQL还不熟悉,目前在我的SQL中遇到了标题中所述的错误。这是我的SQL查询:

SELECT APPLICANT.APPNUM,APPLICANT.APPNAME,COUNT(APPLICATION.APPCNAPPNUM) AS "申请职位的总数"
FROM APPLICANT,APPLICATION
WHERE APPLICANT.APPNUM = APPLICATION.APPCNAPPNUM;

这是创建语句:

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)
);

有人能给我一些建议如何解决这个错误吗?

0
0 Comments

单组群组函数错误是由于在查询中使用了聚合函数(如COUNT)但未包含所有非聚合字段的GROUP BY子句导致的。为了解决这个问题,需要在查询中包含一个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;

在这个示例中,我们从APPLICANT和APPLICATION表中选择APPLICANT.APPNUM和APPLICANT.APPNAME字段,并使用COUNT函数计算APPLICATION.APPCNAPPNUM的数量,并将其命名为"Total No. of Positions Applied"。为了避免单组群组函数错误,我们还需要在GROUP BY子句中包含APPLICANT.APPNUM和APPLICANT.APPNAME字段,以确保所有非聚合字段都被包含在内。

通过在查询中正确使用GROUP BY子句,我们可以避免单组群组函数错误,并确保查询结果正确地按照指定的字段进行分组和聚合。

0
0 Comments

在上述内容中,出现了一个(Single-group group function error)的问题。这个问题的出现原因是在执行SQL查询时,使用了GROUP BY子句,但是在SELECT语句中的列中包含了聚合函数,导致出现了错误。

解决这个问题的方法是使用INNER JOIN代替多个表的旧式写法,并且在GROUP BY子句中使用与SELECT语句中列相同的列。下面是修改后的查询语句:

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

关于INNER JOIN和旧式多表写法的区别,它们的本质是相同的。但是旧式多表写法隐式地执行连接操作,可能导致意外的结果,而INNER JOIN则是显式地执行连接操作,因此可以避免出现意外的结果。

至于GROUP BY子句,是否必须同时使用两个列,取决于具体的情况。例如,如果要按州和城市进行分组,则必须同时使用州和城市进行分组;如果只按州或只按城市分组,则可以只使用其中一个列进行分组。详情请参考链接:http://www.w3schools.com/sql/sql_groupby.asp。

总之,通过使用INNER JOIN代替旧式多表写法,并在GROUP BY子句中使用正确的列,可以解决(Single-group group function error)的问题。

0