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

在SAP HANA计算视图中针对重复行计算平均值

解决方案:计算ColumnA唯一值的平均值并保留ColumnC

看起来你是想计算ColumnA唯一值的总平均值(也就是你说的(10+20+50)/3),同时保留原数据里的所有ColumnC行对吧?之前的方法没达到预期,是因为直接按行计算的话,重复的ColumnA值会被多次拆分计入,导致结果偏离目标。我给你两种常用工具的具体实现方案:

1. 用SQL实现

核心思路

先单独计算ColumnA唯一值的平均值,再把这个平均值和原表的所有ColumnC行做关联,这样每一行ColumnC都会带上正确的总平均值。

方法一:用AVG(DISTINCT)直接计算

大部分主流数据库(MySQL、PostgreSQL、SQL Server等)都支持AVG(DISTINCT)语法,可以一步算出唯一值的平均值:

WITH unique_a_avg AS (
    SELECT AVG(DISTINCT ColumnA) AS total_avg
    FROM your_table_name
)
SELECT 
    t.ColumnC,
    u.total_avg
FROM your_table_name t
CROSS JOIN unique_a_avg u;

方法二:手动求和计数(兼容所有数据库)

如果你的数据库不支持AVG(DISTINCT),可以手动计算唯一值的总和与数量,再求平均:

WITH unique_a_stats AS (
    SELECT 
        SUM(DISTINCT ColumnA) AS sum_unique_a,
        COUNT(DISTINCT ColumnA) AS count_unique_a
    FROM your_table_name
),
total_avg_calc AS (
    SELECT sum_unique_a / count_unique_a AS total_avg
    FROM unique_a_stats
)
SELECT 
    t.ColumnC,
    ta.total_avg
FROM your_table_name t
CROSS JOIN total_avg_calc ta;

2. 用Python Pandas实现

核心思路

先提取ColumnA的唯一值,计算它们的平均值,再把这个单一值广播到原DataFrame的每一行,最后保留需要的ColumnC和平均值列。

代码示例

import pandas as pd

# 假设你的原始数据存储在df中
df = pd.DataFrame({
    'ColumnA': [10, 10, 20, 50, 50],
    'ColumnC': ['X', 'X', 'Y', 'Z', 'Z']
})

# 计算ColumnA唯一值的总平均值
unique_a_values = df['ColumnA'].unique()
total_avg = unique_a_values.sum() / len(unique_a_values)

# 将平均值添加到原DataFrame,保留ColumnC
df['total_avg'] = total_avg

# 输出结果(仅保留需要的列)
result_df = df[['ColumnC', 'total_avg']]
print(result_df)

更简洁的写法

df['total_avg'] = df['ColumnA'].unique().sum() / df['ColumnA'].nunique()
result_df = df[['ColumnC', 'total_avg']]

为什么你的原方法没生效?

你之前尝试的avg=ColumnA/CA_Count,是把每一行的ColumnA值单独除以唯一值的数量,这样重复的ColumnA会被多次计算。比如10出现两次的话,最终会得到(10/3 + 10/3 + 20/3 + 50/3 +50/3),这和你想要的(10+20+50)/3完全不同。正确的做法是先对ColumnA去重,计算去重后的平均值,再把这个值映射到所有行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:12