PostgreSQL创建视图报错42701:列'id'重复定义
解决PostgreSQL视图创建错误:
[42701] ERROR: column "id" specified more than once 这个报错的核心原因是你在SELECT列表中同时选取了departement表的id和commune表的id,但没有给它们指定别名,导致视图的列名重复。PostgreSQL要求视图中的所有列名必须唯一,因此需要给这两个id列添加明确的别名。
另外,你的百分比计算存在整数除法问题:PostgreSQL中整数相除会直接截断小数部分,比如count(rsb.id)/count(bv.id)如果是1/2会得到0,最终百分比也会是0。需要把其中一个数值转换为浮点类型,才能得到正确的百分比结果。
修改后的SQL脚本如下:
CREATE VIEW dashboard_view AS SELECT c.libelle_commune AS "commune", count(bv.id) AS "total_bv", count(rsb.id) AS "bv_saisis", count(bv.id) - count(rsb.id) AS "bv_en_attente", -- 转换为numeric避免整数除法 count(rsb.id)::numeric / count(bv.id) * 100 AS "pourcentage_saisie", count(rsb_t.id) AS "bv_transmis_sie2", count(rsb_t.id)::numeric / count(bv.id) * 100 AS "pourcentage_transmission", -- 给重复的id列添加别名 d.id AS "departement_id", c.id AS "commune_id" FROM commune "c" JOIN departement "d" ON d.id = c.departement_id JOIN bureau_de_vote "bv" ON bv.commune_id = c.id LEFT JOIN scrutin_bureau "sb" ON sb.bureau_de_vote_id = bv.id LEFT JOIN resultat_scrutin_bureau "rsb" ON rsb.scrutin_bureau_id = sb.id LEFT JOIN resultat_scrutin_bureau "rsb_t" ON ( rsb_t.scrutin_bureau_id = sb.id AND rsb_t.etat_id = (SELECT id FROM etat WHERE code = 'transmission') ) JOIN election ON sb.election_id = election.id GROUP BY c.id, d.id;
关键修改点:
- 给
d.id和c.id分别添加别名departement_id和commune_id,解决列名重复问题 - 使用
::numeric将计数转换为数值类型,确保百分比计算保留小数部分
内容的提问来源于stack exchange,提问作者nboulfroy
相关产品推荐
相关产品推荐

