You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何新建列统计varchar列单元格内多值数量?

在PostgreSQL中统计字符串分隔值数量并新增列

场景1:临时查询统计结果(不修改表结构)

如果只是需要临时查看统计数据,无需改动原表结构,可直接执行以下SQL:

  • 统计分隔后的元素总数(不去重):
SELECT 
  vehicle_column,
  array_length(string_to_array(vehicle_column, '/'), 1) AS "count of vehicle"
FROM your_table;
  • 统计分隔后的不同值数量(去重):
SELECT 
  vehicle_column,
  (SELECT COUNT(DISTINCT elem) FROM unnest(string_to_array(vehicle_column, '/')) AS elem) AS "count of vehicle"
FROM your_table;

处理空值/空字符串

若存在单元格为空或仅含分隔符的情况,可通过coalesce和nullif处理,返回0而非null:

SELECT 
  vehicle_column,
  coalesce(array_length(string_to_array(nullif(vehicle_column, ''), '/'), 1), 0) AS "count of vehicle"
FROM your_table;

场景2:新增永久列并填充统计值

如果需要将统计结果永久存入新列,分两步操作:

  1. 添加新列
ALTER TABLE your_table ADD COLUMN "count of vehicle" INTEGER;
  1. 填充统计值
  • 无需去重时:
UPDATE your_table 
SET "count of vehicle" = coalesce(array_length(string_to_array(nullif(vehicle_column, ''), '/'), 1), 0);
  • 需要去重统计时:
UPDATE your_table 
SET "count of vehicle" = (
  SELECT COUNT(DISTINCT elem) 
  FROM unnest(string_to_array(nullif(vehicle_column, ''), '/')) AS elem
);

注意事项

  • 替换your_table为实际表名,vehicle_column为目标字符串列名
  • 若分隔符不是/,直接替换为实际分隔符即可
  • 大表执行UPDATE前建议先备份,或分批更新避免长时间锁表

内容的提问来源于stack exchange,提问作者Joshua Smart-Olufemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:48:14