首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle:对合并列进行分组

oracle:对合并列进行分组
EN

Stack Overflow用户
提问于 2017-11-22 12:27:42
回答 1查看 35关注 0票数 0

我有两张桌子FIRST

代码语言:javascript
复制
id,rl_no,adm_date,fees
1,123456,14-11-10,100
2,987654,10-11-12,30
3,4343,14-11-17,20

SECOND

代码语言:javascript
复制
id,rollno,fare,type
1,123456,20,bs
5,634452,1000,bs
3,123456,900,bs
4,123456,700,bs

我的需求是双重的,1,我首先需要使用公共的从两个表中获取所有列。所以我用:

代码语言:javascript
复制
SELECT a.ID,a.rl_no,a.adm_date,a.fees,b.rollno,b.fare,b.type FROM FIRST a 
    INNER JOIN 
        SECOND b ON a.rl_no = b.rollno

输出如下:

代码语言:javascript
复制
id,rl_no,adm_date,fees,rollno,fare,type
1,123456,14-11-10,100,123456,20,bs
1,123456,10-11-12,100,123456,900,bs
1,123456,14-11-17,100,123456,700,bs

接下来,我想得到两个表之间常见的sum(fare) rollno fare >= fees ,以及由 FIRST 表组按rollno和id获得的fare >= feesE 232

我的问题是:

代码语言:javascript
复制
SELECT x.ID,x.rl_no,,x.adm_date,x.fees,x.rollno,x.type,sum(x.fare) as "fare" from (SELECT a.ID,a.rl_no,a.adm_date,a.fees,b.rollno,b.fare,b.type FROM FIRST a 
    INNER JOIN 
        SECOND b ON a.rl_no = b.rollno) x, FIRST y 
      WHERE x.rollno = y.rl_no AND x.fare >= y.fees AND x.type IS NOT NULL GROUP BY x.rollno,x.ID ; 

但这也带来了一些例外。

代码语言:javascript
复制
ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

预期的产出如下:

代码语言:javascript
复制
id,rollno,adm_date,fare,type
1,123456,14-11-10,1620,bs

有人能给我看看我在这里做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 13:28:46

看起来这里有几个不同的问题;

首先,您试图按不存在的x.ID列进行分组;看起来,您需要向子查询中的选定列添加ID。

其次,当使用GROUP BY进行聚合时,所有选定的列都需要在GROUP语句中列出或聚合。如果您是按rollno和ID进行分组,您希望adm_date、费用和类型的所有额外值发生什么变化?对于每个不同的rollno和ID对,这些总是相同的吗?

如果是这样,只需通过语句将它们添加到组中,即,

代码语言:javascript
复制
GROUP BY adm_date, fees, type, rollno, ID

如果没有,则需要精确地计算出要选择输出的方式;如果您的输出与示例类似(在这里添加一个ID列)

代码语言:javascript
复制
ID,adm_date,fees,rollno,fare,type
1,14-11-10,100,123456,20,bs
1,10-11-12,100,123456,900,bs
1,14-11-17,100,123456,700,bs

将结果集称为a。如果我跑了;

代码语言:javascript
复制
SELECT a.ID, a.rollno, SUM(a.fare) as total_fare 
FROM a 
GROUP BY a.ID, a.rollno

结果将是一排;

代码语言:javascript
复制
ID,rollno,total_fare
1,123456,1620

因此,如果您还选择了adm_date、费用和类型列,甲骨文就不知道您对它们意味着什么。您没有使用它们进行分组,也没有告诉甲骨文您想要选择使用哪一个。

你可以做这样的事

代码语言:javascript
复制
SELECT a.ID, 
       FIRST(a.adm_date) as first_adm_date, 
       FIRST(a.fees) as first_fees, 
       a.rollno, 
       SUM(a.fare) as total_fare, 
       FIRST(a.type) as first_type
FROM a 
GROUP BY a.ID, a.rollno

这会给出结果;

代码语言:javascript
复制
ID,first_adm_date,first_fees,rollno,total_fare,first_type
1,14-11-10,100,123456,1620,bs

我不知道你是不是想这么做。

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

https://stackoverflow.com/questions/47434737

复制
相关文章

相似问题

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