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

如何获取SQL数组中的高频值:统计用户常驻州实现方法

解法

下面分两种常用处理场景给出可直接运行的代码:

1. Python Pandas 环境

如果你的数据是存在Pandas DataFrame中,可借助collections.Counter快速统计列表最高频元素:

import pandas as pd
from collections import Counter
import ast

# 第一步:如果STATE列是字符串格式的数组(比如从csv读出来默认是字符串),先转换为Python列表
df['STATE'] = df['STATE'].apply(ast.literal_eval)

# 第二步:定义统计最高频州的函数
def get_resident_state(state_list):
    # Counter.most_common(1)返回频次最高的(元素, 计数)元组
    return Counter(state_list).most_common(1)[0][0]

# 第三步:生成结果表
result_df = pd.DataFrame()
result_df['USER_ID'] = df['USER_ID']
result_df['STATE'] = df['STATE'].apply(get_resident_state)

运行后result_df就是你需要的输出格式。

2. SQL 环境(适配Hive/Spark SQL等支持数组函数的数仓)

如果数据是存在数仓表中,可通过炸数组+窗口排序的方式实现:

-- 先统计每个用户每个州的出现次数
WITH state_freq AS (
    SELECT
        USER_ID,
        state_item AS STATE,
        COUNT(1) AS appear_cnt
    FROM ADDRESSES
    -- 炸开STATE数组,每个元素生成一行
    LATERAL VIEW EXPLODE(STATE) tmp AS state_item
    GROUP BY USER_ID, state_item
),
-- 给每个用户的州按出现次数倒序排名
state_rn AS (
    SELECT
        USER_ID,
        STATE,
        ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY appear_cnt DESC) AS rn
    FROM state_freq
)
-- 取排名第一的就是常驻州
SELECT USER_ID, STATE
FROM state_rn
WHERE rn = 1
ORDER BY USER_ID;

注:如果存在多个州出现频次并列最高的情况,把ROW_NUMBER替换为RANK即可返回所有并列最高的州,当前示例数据无并列情况,两种写法结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:57:04