首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle ORA-00937:不是单个组函数

Oracle ORA-00937:不是单个组函数
EN

Database Administration用户
提问于 2013-04-22 17:17:06
回答 3查看 20.2K关注 0票数 1

每一次旅行都想把它们相加,计算出两者之间的距离。

代码语言:javascript
复制
SELECT Journey.Journey_No, Stages.Stage_ID, SUM(Stages.Distance_Between)
FROM Journey, Journey_Stages, Stages
WHERE Journey.Journey_No=Journey_Stages.Journey_No
AND Journey_Stages.Stage_ID=Stages.Stage_ID;

表如下:

代码语言:javascript
复制
CREATE TABLE Journey_Stages(Journey_No integer REFERENCES
Journey(Journey_No),Stage_ID integer REFERENCES Stages(Stage_ID));

CREATE TABLE Stages(Stage_ID integer PRIMARY KEY, Start_Station
integer REFERENCES Stations(Station_ID), End_Station integer
REFERENCES Stations(Station_ID));

CREATE TABLE Journey(Journey_No integer PRIMARY KEY, Train_No integer
REFERENCES Train(Train_No));

但是,我得到了以下错误:

代码语言:javascript
复制
ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action: Error at Line: 273 Column: 26

我相信这是一个很容易解决的问题。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2013-04-23 07:35:13

如果您想要每次旅行的距离,您需要group by旅程:

代码语言:javascript
复制
SELECT Journey.Journey_No, SUM(Stages.Distance_Between)
FROM Journey, Journey_Stages, Stages
WHERE Journey.Journey_No=Journey_Stages.Journey_No
AND Journey_Stages.Stage_ID=Stages.Stage_ID
GROUP BY Journey.Journey_No;

将其与Rolando发布的选项2进行比较,您将注意到我从SELECT和GROUP BY子句中各删除了一列。

票数 3
EN

Database Administration用户

发布于 2013-04-22 17:23:26

你应该做两件事之一:

选项1:只保留聚合列

代码语言:javascript
复制
SELECT SUM(Stages.Distance_Between)
FROM Journey, Journey_Stages, Stages
WHERE Journey.Journey_No=Journey_Stages.Journey_No
AND Journey_Stages.Stage_ID=Stages.Stage_ID;

选项2:添加一个GROUP BY子句

代码语言:javascript
复制
SELECT Journey.Journey_No, Stages.Stage_ID, SUM(Stages.Distance_Between)
FROM Journey, Journey_Stages, Stages
WHERE Journey.Journey_No=Journey_Stages.Journey_No
AND Journey_Stages.Stage_ID=Stages.Stage_ID
GROUP BY Journey.Journey_No, Stages.Stage_ID;
票数 3
EN

Database Administration用户

发布于 2013-04-23 07:23:34

选项#3使用窗口函数:

代码语言:javascript
复制
SELECT Journey.Journey_No, 
       Stages.Stage_ID, 
       SUM(Stages.Distance_Between) over (partition by Journey.Journey_No) as dist_sum
FROM Journey
  JOIN Journey_Stages ON Journey.Journey_No=Journey_Stages.Journey_No
  JOIN Stages ON Journey_Stages.Stage_ID=Stages.Stage_ID;

但我想你可能想要罗兰多的第二选择

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/40633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档