我试图从两个表中选择值,并将它们插入到一个表中,然后计算每年的总位置数。我一直得到一个错误,说这里不允许序列
DROP table placement_cal CASCADE CONSTRAINTS;
CREATE TABLE placement_cal(
cal_id INTEGER NOT NULL,
year INTEGER,
no_of_placements INTEGER,
CONSTRAINT pk_cal_dim PRIMARY KEY (cal_id)
);
INSERT INTO placement_cal (
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year);
INSERT INTO placement_cal (
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement_two
group by year);
5条答案
按热度按时间qacovj5a1#
您可以在FAQ中获取原因
以下是不能使用序列的情况:
对于SELECT语句:
ep6jt1vc2#
此查询引发异常:
这是因为不能在带有
group by
子句的查询中选择序列值。另外,
group by
子句必须包含来自select
子句的所有非聚合表达式,而你的子句没有。我猜year
是EXTRACT(YEAR FROM start_date)
的别名,在这种情况下,这就是你需要的查询:sqougxex3#
很惊讶我在这里没有看到实际的解决方案。使用CTE是一种变通方法。类似这样的东西应该可以工作:
0mkxixxg4#
当您在一个表中插入数据并从另一个表中获取数据时,请不要使用order by子句,以避免序列号不允许错误。
628mspwn5#
这样做你可以使用这样的序列,对于分组部分,我建议你遵循@Tony INSERT INTO placement_cal(cal_id.nextval,EXTRACT(YEAR FROM start_date),count(placement_id)FROM placement group by year)的其他答案;