如何在BigQuery中使用标准SQL或Legacy SQL基于两个字段创建交叉表
生成客户-产品类别购买数量交叉表的解决方案
我来帮你搞定这个交叉表统计需求,下面是几种不同工具的实现方案,你可以根据自己的使用场景选择:
1. Python Pandas 实现
这是处理数据分析场景的高效方式,代码简洁且能灵活调整格式:
import pandas as pd # 构建你的示例数据集 data = { 'Customer_ID': ['MEM014', 'KAR810', 'NIKE61', 'NIKE61', 'STT019', 'STT019', 'STT019'], 'Style': ['BLS87', 'DR126', 'MMQ5', 'MMQ5', 'BLS83', 'BLS84', 'BLS87'] } df = pd.DataFrame(data) # 生成交叉表:行是客户ID,列是产品类别,值为购买数量 cross_table = pd.crosstab(df['Customer_ID'], df['Style']).reset_index() # 移除多余的轴标签,让结果更贴近你的期望格式 cross_table = cross_table.rename_axis(None, axis=1) print(cross_table)
运行后输出的结果会和你期望的完全一致:
Customer_ID BLS83 BLS84 BLS87 DR126 MMQ5 0 MEM014 0 0 1 0 0 1 KAR810 0 0 0 1 0 2 NIKE61 0 0 0 0 2 3 STT019 1 1 1 0 0
2. Excel 数据透视表实现
如果你习惯用Excel处理数据,用数据透视表可以可视化完成:
- 选中包含表头的所有数据区域
- 点击「插入」选项卡中的数据透视表,选择透视表的放置位置
- 在右侧字段列表中:
- 将「Customer_ID」拖到行区域
- 将「Style」拖到列区域
- 将「Style」拖到值区域,然后右键点击值区域的字段→值字段设置,选择「计数」
- (可选)如果透视表中显示空白,可通过「查找和替换」将空白替换为0,或者在值字段设置中调整格式
3. SQL 实现(以MySQL为例)
如果数据存储在数据库中,可以用条件聚合直接查询出结果:
SELECT Customer_ID, COUNT(CASE WHEN Style = 'DR126' THEN 1 END) AS DR126, COUNT(CASE WHEN Style = 'MMQ5' THEN 1 END) AS MMQ5, COUNT(CASE WHEN Style = 'BLS83' THEN 1 END) AS BLS83, COUNT(CASE WHEN Style = 'BLS84' THEN 1 END) AS BLS84, COUNT(CASE WHEN Style = 'BLS87' THEN 1 END) AS BLS87 FROM your_table_name GROUP BY Customer_ID ORDER BY Customer_ID;
如果你的产品类别(Style)有很多动态值,这种硬编码的方式不够灵活,可以考虑用数据库的动态SQL来自动生成列,但对于固定类别,这个方案直接高效。
内容的提问来源于stack exchange,提问作者yigitozmen
相关产品推荐
相关产品推荐

