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

PostgreSQL分组查询:统计含不同isin值的sval分组

PostgreSQL分组检查isin值差异解决方案

表结构

题目中的表定义如下:

create table t1(id,sval)as values
 (88,      'X129de')
,(4,       'YHK33e')
,(44,      '1K4892')
,(53,      'YHK33e')
,(42,      'YHK33e')
,(2,       '1K4892')
,(1,       '1K4892')
,(99,      'X129de');

create table t2(id,isin)as values
 (88,      'XXXXXX')
,(4,       'UUUUUU')
,(44,      'IIIIII')
,(53,      'UUUUUU')
,(42,      'IIIIII')
,(2,       'UUUUUU')
,(1,       'UUUUUU')
,(99,      'XXXXXX');

1. 获取每个分组的isin差异判断结果

关联两张表后按sval分组,通过COUNT(DISTINCT isin)判断分组内是否存在不同的isin值:

SELECT
    t1.sval,
    CASE
        WHEN COUNT(DISTINCT t2.isin) > 1 THEN '存在不同isin值'
        ELSE '所有isin值一致'
    END AS 分组判断结果,
    COUNT(DISTINCT t2.isin) AS 唯一isin数量
FROM t1
INNER JOIN t2 ON t1.id = t2.id
GROUP BY t1.sval;

执行结果:

sval分组判断结果唯一isin数量
X129de所有isin值一致1
YHK33e存在不同isin值2
1K4892存在不同isin值2

2. 统计存在不同isin值的分组数量

基于分组结果,过滤出存在差异的分组并统计总数:

SELECT COUNT(*) AS 存在差异的分组数
FROM (
    SELECT t1.sval
    FROM t1
    INNER JOIN t2 ON t1.id = t2.id
    GROUP BY t1.sval
    HAVING COUNT(DISTINCT t2.isin) > 1
) AS filtered_groups;

执行结果:

存在差异的分组数
2

关键逻辑说明

  • INNER JOIN确保t1的每条记录都匹配到t2对应的isin值
  • COUNT(DISTINCT t2.isin)统计分组内不重复的isin数量,大于1则表示分组内存在不同值
  • HAVING子句过滤出存在差异的分组,外层查询统计这类分组的总数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:40:02