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

PostgreSQL视图创建:CASE WHEN赋值列值报类型不匹配错误如何解决

问题原因

你触发报错的核心原因是CASE表达式中误用了判断逻辑作为返回值:
你在THEN分支写的test.category = test.metric_type是布尔判断语句,返回结果为true/false的布尔类型,而ELSE分支返回的是text类型的字段值,两种类型不匹配,因此数据库抛出类型无法对齐的错误。

另外你的原始代码还存在两个不符合需求的问题:

  • 子查询添加了WHERE lin.metric_type LIKE 'SIZE_%'过滤条件,会直接丢弃所有非SIZE_开头的原始数据,如果你需要保留全量数据需要删除该条件
  • SELECT列表重复返回了metric_type字段,和你要求的输出结构不符
修复后的代码

以下是符合需求的视图代码,可直接使用:

CREATE OR REPLACE VIEW <替换为你的视图名称> AS
SELECT
  lin.metric_name,
  -- 处理metric_type:SIZE_开头则替换为company_size,否则保留原值
  CASE WHEN lin.metric_type LIKE 'SIZE_%' THEN 'company_size' ELSE lin.metric_type END AS metric_type,
  lin.metric_value,
  -- 处理category:SIZE_开头则取原metric_type值,否则赋值为Undefined
  CASE WHEN lin.metric_type LIKE 'SIZE_%' THEN lin.metric_type ELSE 'Undefined'::text END AS category
FROM "LIN_Main_Followers" lin;

如果你确实只需要保留SIZE_前缀的行,可以在FROM语句后追加过滤条件:

WHERE lin.metric_type LIKE 'SIZE_%'

添加该过滤条件后,CASE分支可以直接简化为固定值,不需要再做判断。

验证效果

执行上述代码后,原metric_type = 'SIZE_10001_OR_MORE'的行输出结果和你要求的理想输出完全一致:

metric_namemetric_typemetric_valuecategory
likescompany_size2SIZE_10001_OR_MORE
likescompany_size10SIZE_11_TO_50

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:57:03