我正在尝试从两个表中选择值并将它们插入一个表中,并计算每年总计的展示位置数。我一直收到错误,说这里不允许序列
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);
答案 0 :(得分:12)
您可以在FAQ
中了解原因以下是您无法使用序列的情况:
对于SELECT语句:
- 在WHERE子句中
- 在GROUP BY或ORDER BY子句中
- 在DISTINCT条款中
- 连同UNION或INTERSECT或MINUS
- 在子查询中
答案 1 :(得分:9)
此查询引发异常:
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year;
这是因为您无法在带有group by
子句的查询中选择序列值。
此外,group by
子句必须包含select
子句中的所有非聚合表达式,这些表达式是您自己做的。我猜测year
是EXTRACT(YEAR FROM start_date)
的别名,在这种情况下,这是您需要的查询:
INSERT INTO placement_cal
SELECT cal_id.nextval, year, cnt FROM
( SELECT EXTRACT(YEAR FROM start_date) year, count(placement_id) cnt
FROM placement
group by EXTRACT(YEAR FROM start_date)
);
答案 2 :(得分:0)
很惊讶我在这里没有看到实际的解决方案。使用 CTE 是一种解决方法。这样的事情应该可以工作:
async
答案 3 :(得分:-1)
这样做 您可以使用这样的序列,对于部分分组,我建议您遵循@Tony的其他答案 INSERT INTO placement_cal( cal_id.nextval,EXTRACT(从起始日期开始的年),count(placement_id) 从刊登位置 按年份分组);
INSERT INTO placement_cal (
cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement_two
group by year);