我有两张桌子FIRST
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
id,rollno,fare,type
1,123456,20,bs
5,634452,1000,bs
3,123456,900,bs
4,123456,700,bs我的需求是双重的,1,我首先需要使用公共的从两个表中获取所有列。所以我用:
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输出如下:
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 >= fees。E 232
我的问题是:
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 ; 但这也带来了一些例外。
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"预期的产出如下:
id,rollno,adm_date,fare,type
1,123456,14-11-10,1620,bs有人能给我看看我在这里做错了什么吗?
发布于 2017-11-22 13:28:46
看起来这里有几个不同的问题;
首先,您试图按不存在的x.ID列进行分组;看起来,您需要向子查询中的选定列添加ID。
其次,当使用GROUP BY进行聚合时,所有选定的列都需要在GROUP语句中列出或聚合。如果您是按rollno和ID进行分组,您希望adm_date、费用和类型的所有额外值发生什么变化?对于每个不同的rollno和ID对,这些总是相同的吗?
如果是这样,只需通过语句将它们添加到组中,即,
GROUP BY adm_date, fees, type, rollno, ID如果没有,则需要精确地计算出要选择输出的方式;如果您的输出与示例类似(在这里添加一个ID列)
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。如果我跑了;
SELECT a.ID, a.rollno, SUM(a.fare) as total_fare
FROM a
GROUP BY a.ID, a.rollno结果将是一排;
ID,rollno,total_fare
1,123456,1620因此,如果您还选择了adm_date、费用和类型列,甲骨文就不知道您对它们意味着什么。您没有使用它们进行分组,也没有告诉甲骨文您想要选择使用哪一个。
你可以做这样的事
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这会给出结果;
ID,first_adm_date,first_fees,rollno,total_fare,first_type
1,14-11-10,100,123456,1620,bs我不知道你是不是想这么做。
https://stackoverflow.com/questions/47434737
复制相似问题