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

保留全列时计算count(distinct group)及拆分blocks的实现疑问

数据表分组均分字段解决方案

示例输入输出

假设原表结构及数据如下(除group列外,同CODE的其他列值完全一致):

输入表

CODEtotal_blocksgroupother_cols
A12G1val1
A12G2val1
A12G3val1
B8G4val2
B8G5val2

预期输出

CODEtotal_blocksgroupother_colsgroup_countblocks
A12G1val134
A12G2val134
A12G3val134
B8G4val224
B8G5val224

解决方案

核心是按CODE分组计算去重后的group数量,再将total_blocks均分到对应行。

方法1:窗口函数(主流数据库支持)

直接用窗口函数按CODE分区,计算去重group的数量,再做除法:

SELECT
    *,
    COUNT(DISTINCT "group") OVER (PARTITION BY CODE) AS group_count,
    total_blocks / COUNT(DISTINCT "group") OVER (PARTITION BY CODE) AS blocks
FROM your_table;

注意:group是SQL关键字,需用引号包裹(PostgreSQL用双引号,MySQL用反引号`)避免语法错误。

方法2:子查询关联(兼容旧版数据库)

如果你的数据库不支持窗口函数中的COUNT(DISTINCT),可以先预计算每个CODE的分组数,再关联原表:

WITH code_group_stats AS (
    SELECT CODE, COUNT(DISTINCT "group") AS group_count
    FROM your_table
    GROUP BY CODE
)
SELECT
    t.*,
    c.group_count,
    t.total_blocks / c.group_count AS blocks
FROM your_table t
JOIN code_group_stats c ON t.CODE = c.CODE;

精度处理

如果需要保留小数精度,可将整数转换为浮点型:

-- PostgreSQL写法
total_blocks::FLOAT / group_count AS blocks
-- 通用写法
CAST(total_blocks AS DECIMAL(10,2)) / group_count AS blocks

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:50:26