mysql 行转列函数
时间: 2024-07-28 20:01:18 浏览: 64
MySQL中的行转列(也称为宽表到窄表或扁平化)通常涉及将数据从一行转换为多行,以便更好地表示或分析数据。这通常是通过一些内置的函数或技巧来完成的,主要有以下几个功能:
1. **UNNEST() 或 EXTRACTVALUE()**:这两个函数主要用于XML数据类型,可以将XML字段展开成多行。
2. **CASE WHEN...ELSE**:当每个条件满足时,可以使用CASE WHEN表达式创建新的列,并为每个情况分配一个值。
3. **PIVOT() 或 UNPIVOT**:MySQL的PIVOT函数允许你在一张表中改变列的布局,适用于将一个值列表变成列标题下的单独行。
4. **JSON_EXTRACT() 和 JSON_TABLE()**:对于JSON类型的列,可以用这些函数提取嵌套的对象或数组,将其转换为行。
5. **GROUP_CONCAT() 和 STRING_AGG()**: 当需要合并多个值到单个列时,可以使用这些函数,它们会将行内的值连接起来形成字符串。
举个例子,假设有一个包含产品ID和销售日期的表格,想按年份统计每个月的销售额,可以这样做:
```sql
SELECT product_id, year(date), month(date), sum(sales_amount)
FROM (
SELECT product_id, date, sales_amount,
DATE_FORMAT(date, '%Y') as year,
DATE_FORMAT(date, '%m') as month
FROM sales_data
) t
GROUP BY product_id, year, month;
```
阅读全文