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

SQL需求:统计与临时表列值匹配的列数并新增统计列

实现产品表与临时表属性列匹配数量统计的SQL方案

需求说明

将产品表每行数据与临时表的attr1、attr2、attr3、attr4列逐列比对,统计匹配的列数,新增CNT_Match_cols列存储该统计结果。

测试数据

临时表(temp_table)

idprod_nameattr1attr2attr3attr4
1test namebrandbottlesize12x

产品表(product_table)

idprod_nameattr1attr2attr3attr4
3test namebrandbottlesize12x
4some namebrandsatchetsize1x
5samplebrandbottlesize23x

SQL解决方案

SELECT 
    p.id,
    p.prod_name,
    p.attr1,
    p.attr2,
    p.attr3,
    p.attr4,
    -- 逐列判断匹配情况并累加计数
    (CASE WHEN p.attr1 = t.attr1 THEN 1 ELSE 0 END) +
    (CASE WHEN p.attr2 = t.attr2 THEN 1 ELSE 0 END) +
    (CASE WHEN p.attr3 = t.attr3 THEN 1 ELSE 0 END) +
    (CASE WHEN p.attr4 = t.attr4 THEN 1 ELSE 0 END) AS CNT_Match_cols
FROM product_table p
CROSS JOIN temp_table t;

逻辑说明

  1. 表关联:由于临时表仅一行数据,使用CROSS JOIN让产品表的每一行都与临时表的该行建立关联。
  2. 匹配判断:通过CASE表达式对每个属性列进行匹配校验,匹配则返回1,不匹配返回0。
  3. 统计计数:将四个属性列的判断结果相加,得到当前行与临时表匹配的列数,存入CNT_Match_cols。

注意事项

如果属性列存在NULL值,直接使用=判断会导致NULL与NULL不被视为匹配。此时可改用IS NOT DISTINCT FROM(兼容PostgreSQL、SQLite等数据库)来处理NULL场景:

(CASE WHEN p.attr1 IS NOT DISTINCT FROM t.attr1 THEN 1 ELSE 0 END) +
(CASE WHEN p.attr2 IS NOT DISTINCT FROM t.attr2 THEN 1 ELSE 0 END) +
(CASE WHEN p.attr3 IS NOT DISTINCT FROM t.attr3 THEN 1 ELSE 0 END) +
(CASE WHEN p.attr4 IS NOT DISTINCT FROM t.attr4 THEN 1 ELSE 0 END) AS CNT_Match_cols

预期结果

idprod_nameattr1attr2attr3attr4CNT_Match_cols
3test namebrandbottlesize12x4
4some namebrandsatchetsize1x2
5samplebrandbottlesize23x3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:44:49