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

按唯一分组统计各ID的不同布尔值,计算产品类别审批百分比

嘿,我来帮你搞定这两个SQL需求,分情况给你拆解清楚:

问题1:统计唯一分组中每个ID对应的不同布尔值数量

假设你的表结构包含类似group_id(分组标识)、account_id(目标ID)、is_valid(布尔值列)这类字段,要统计每个account_id在所属唯一分组里出现的不同布尔值数量,直接用分组聚合结合COUNT(DISTINCT)就能实现:

SELECT
    group_id,
    account_id,
    COUNT(DISTINCT is_valid) AS distinct_boolean_count
FROM
    your_table
GROUP BY
    group_id,
    account_id;
  • GROUP BY group_id, account_id确保我们是按「唯一分组+ID」的组合维度来统计
  • COUNT(DISTINCT is_valid)会精准计算该组合下出现的不同布尔值种类数(比如同时存在true和false的话结果就是2,只有一种状态就是1)
问题2:新增产品类别下的审批百分比列

假设你已经能通过子查询得到每个account_id在对应产品类别下的审批状态(布尔值is_approved),现在要新增一列展示该类别整体的审批百分比,用窗口函数是最高效的方案,不用额外嵌套复杂子查询:

先给你一个完整的可复用示例,假设原表是product_accounts,包含category(产品类别)、account_id(账户ID),审批状态通过关联service_approvals表判断:

SELECT
    pa.category,
    pa.account_id,
    -- 这里替换成你实际的审批判断逻辑
    EXISTS (
        SELECT 1 
        FROM service_approvals sa 
        WHERE sa.account_id = pa.account_id 
          AND sa.service_type = 'target_service'
    ) AS is_approved,
    -- 计算当前类别下的审批百分比,保留两位小数
    ROUND(
        SUM(CASE WHEN EXISTS (
            SELECT 1 
            FROM service_approvals sa 
            WHERE sa.account_id = pa.account_id 
              AND sa.service_type = 'target_service'
        ) THEN 1 ELSE 0 END) OVER (PARTITION BY pa.category) 
        / COUNT(*) OVER (PARTITION BY pa.category) 
        * 100,
        2
    ) AS category_approval_percentage
FROM
    product_accounts pa
GROUP BY
    pa.category,
    pa.account_id;

如果觉得重复写审批子查询太啰嗦,用CTE(公共表达式)预处理一下,代码会更清爽:

WITH account_approval_status AS (
    SELECT
        pa.category,
        pa.account_id,
        EXISTS (
            SELECT 1 
            FROM service_approvals sa 
            WHERE sa.account_id = pa.account_id 
              AND sa.service_type = 'target_service'
        ) AS is_approved
    FROM
        product_accounts pa
)
SELECT
    *,
    ROUND(
        SUM(CASE WHEN is_approved THEN 1 ELSE 0 END) OVER (PARTITION BY category) 
        / COUNT(*) OVER (PARTITION BY category) 
        * 100,
        2
    ) AS category_approval_percentage
FROM
    account_approval_status;
  • PARTITION BY category把统计范围限定在当前产品类别内,不会跨类别计算
  • SUM(CASE...)统计该类别下获批的账户总数,COUNT(*)统计类别总账户数,两者相除再转成百分比
  • ROUND(...,2)是为了让百分比更美观,你可以根据需求调整保留的小数位数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:33:18