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

如何在Snowflake SQL中计算多列的横向众数

计算每行多列数据的众数

问题说明

我目前只会计算单列数据的众数,不知道怎么横向合并多列(如下方示例里的Column A、Column B、Column C)来计算每行的众数。

输入输出示例

输入数据

IDColumn AColumn BColumn C
1catcatdog
2dogcatdog
3catcatdog
4birdcatbird

输出结果

IDColumn AColumn BColumn CMode
1catcatdogcat
2dogcatdogdog
3catcatdogcat
4birdcatbirdbird

解决方案

1. Excel/Google Sheets 实现

直接使用MODE.SNGL函数,针对每行的目标列计算众数:

  • 在E2单元格(对应第一行的Mode列)输入公式:=MODE.SNGL(B2:D2)
  • 下拉填充公式到所有行即可

注:Excel 2019及以后版本、Google Sheets支持直接用MODE.SNGL处理文本类型数据;如果是旧版Excel,可使用INDEX(B2:D2,MODE(MATCH(B2:D2,B2:D2,0)))实现兼容。

2. Python Pandas 实现

通过自定义函数按行处理数据,计算每行众数:

import pandas as pd

def get_row_mode(row):
    # 获取当前行的众数,若有多个取第一个
    mode_result = row.mode()
    return mode_result.iloc[0] if not mode_result.empty else None

# 构造示例数据(实际场景可替换为pd.read_csv/pd.read_excel读取数据)
data = {
    'ID': [1, 2, 3, 4],
    'Column A': ['cat', 'dog', 'cat', 'bird'],
    'Column B': ['cat', 'cat', 'cat', 'cat'],
    'Column C': ['dog', 'dog', 'dog', 'bird']
}
df = pd.DataFrame(data)

# 对指定列按行计算众数,新增Mode列
df['Mode'] = df[['Column A', 'Column B', 'Column C']].apply(get_row_mode, axis=1)

print(df)

3. SQL 实现(以PostgreSQL为例)

通过将每行多列转为多行统计次数,再判断众数:

SELECT 
    ID,
    "Column A",
    "Column B",
    "Column C",
    -- 按出现次数排序,取出现次数最多的第一个值
    FIRST_VALUE(val) OVER (
        PARTITION BY ID 
        ORDER BY COUNT(val) DESC, 
                 -- 若次数相同,取最先出现的列的值
                 CASE val 
                     WHEN "Column A" THEN 1 
                     WHEN "Column B" THEN 2 
                     WHEN "Column C" THEN 3 
                 END
    ) AS Mode
FROM (
    -- 将每行的三列拆分为多行数据
    SELECT 
        ID,
        "Column A",
        "Column B",
        "Column C",
        unnest(ARRAY["Column A", "Column B", "Column C"]) AS val
    FROM your_table
) t
GROUP BY ID, "Column A", "Column B", "Column C", val
ORDER BY ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:15:34