### 如何将多行相同数据合并为一行?
#### 常见场景
需要将数据表中**相同键(Key)的多行数据合并为一行**,通常用于:
- 合并重复数据
- 聚合统计(如求和、拼接文本等)
- 数据清洗或格式化
---
#### 解决方案(以不同工具为例)
##### 1. SQL 数据库
sql
-- 使用 GROUP BY + 聚合函数
SELECT
key_column,
GROUP_CONCAT(value_column SEPARATOR ',') AS merged_values,
SUM(numeric_column) AS total
FROM table_name
GROUP BY key_column;
- **关键函数**:
- `GROUP_CONCAT()`(MySQL/MariaDB)
- `STRING_AGG()`(PostgreSQL/SQL Server)
- `LISTAGG()`(Oracle)
##### 2. Python(Pandas)
python
import pandas as pd
# 读取数据
df = pd.read_csv("data.csv")
# 合并相同键的行,拼接文本字段并求和数值字段
merged_df = df.groupby("key_column").agg({
"text_column": lambda x: ",".join(x),
"numeric_column": "sum"
}).reset_index()
print(merged_df)
##### 3. Excel
1. **数据透视表**:
- 将键字段拖到行区域
- 将需要合并的字段拖到值区域,设置值显示方式为“求和”或“连接字符串”(需安装 Power Query)
2. **公式法**:
excel
=TEXTJOIN(",", TRUE, IF(A:A=A2, B:B, ""))
(按 `Ctrl+Shift+Enter` 输入数组公式)
##### 4. Shell(文本文件处理)
bash
# 按第一列合并,拼接第二列
awk -F',' '{a[$1] = a[$1] ? a[$1] "," $2 : $2} END {for (i in a) print i","a[i]}' input.csv
---
#### 注意事项
1. **去重处理**:合并前可先用 `DISTINCT` 去重
2. **性能优化**:大数据量时优先使用数据库或编程工具
3. **分隔符选择**:根据内容避免使用数据中已存在的字符
示例输入输出:
原始数据:
ID | Value
1 | A
1 | B
2 | C
合并后:
ID | Merged
1 | A,B
2 | C
根据实际需求选择最适合的工具和方法即可。