如何在postgresql中通过select查询插入序列号?

SSM*_*SMK 1 sql postgresql insert sql-insert

我有一个名为student以下各列的表,如下所示

S_id, person_id, subject_id, start_date, end_date, count
Run Code Online (Sandbox Code Playgroud)

同时,我编写了一个查询来从其他表中提取数据并将其输入到表person

我写的查询如下所示

INSERT INTO student (S_id, person_id, subject_id, start_date, end_date, count)
SELECT
    person_id
    , subject_id,
    , MIN(exam_start_date) AS start_date
    , end_date 
    , COUNT(*) AS count
FROM main_table
GROUP BY person_id, subject_id, end_date 
ORDER BY person_id, subject_id
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我select query仅从person_id其他列获取数据。

如何为select 语句中的列创建autoincrementor以便插入数据?serialS_id

目前,我收到一个错误

错误:“S_id”列中的空值违反了非空约束详细信息:失败的行包含 (null, 1234, 77670, 2139-04-22, 2139-04-22, 1)。

S-M*_*Man 6

如果您的s_id列尚未定义为serial或其他内容(否则只需将其从语句的列列表中保留INSERT):

您在寻找row_number()窗口函数吗?这将为您的查询创建一个递增的行计数,以 开头1

SELECT
    row_number() OVER () as s_id, -- <---------------
    person_id
    , subject_id,
    , MIN(exam_start_date) AS start_date
    , end_date 
    , COUNT(*) AS count
FROM main_table
GROUP BY person_id, subject_id, end_date 
ORDER BY person_id, subject_id
Run Code Online (Sandbox Code Playgroud)

如果已经有一些记录,也许您应该添加s_id实际表中的当前最大值,以避免与具有相同值的现有记录发生冲突。studentsid