我试图从两个表中选择值并将它们插入一个表中,并计算每年总计的展示位置数.我一直收到一个错误,说这里不允许序列
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);
Run Code Online (Sandbox Code Playgroud)
Ton*_*ews 10
此查询引发异常:
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year;
Run Code Online (Sandbox Code Playgroud)
这是因为您无法在带有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)
);
Run Code Online (Sandbox Code Playgroud)
很惊讶我在这里没有看到实际的解决方案。使用 CTE 是一种解决方法。像这样的东西应该有效:
INSERT INTO placement_cal (
WITH tempPlacement AS (
SELECT EXTRACT(YEAR FROM start_date) year, count(placement_id) cnt
FROM placement
group by EXTRACT(YEAR FROM start_date)
) SELECT cal_id.nextval, year, cnt FROM tempPlacement
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37600 次 |
| 最近记录: |