PIVOT
PIVOT
操作允许您通过旋转表并根据指定列聚合结果来转换表。
它对于以更易读的格式汇总和分析大量数据非常有用。在本文 档中,我们将解释语法并提供一个如何使用 PIVOT
操作的示例。
另请参阅: UNPIVOT
语法
SELECT ...
FROM ...
PIVOT ( <aggregate_function> ( <pivot_column> )
FOR <value_column> IN ( <pivot_value_1> [ , <pivot_value_2> ... ] ) )
[ ... ]
其中:
<aggregate_function>
:用于组合pivot_column
中分组值的聚合函数。<pivot_column>
:将使用指定的<aggregate_function>
进行聚合的列。<value_column>
:其唯一值将成为旋转结果集中新列的列。<pivot_value_N>
:来自<value_column>
的唯一值,将成为旋转结果集中的新列。
示例
假设我们有一个名为 monthly_sales 的表,其中包含不同员工在不同 月份的销售数据。我们可以使用 PIVOT
操作来汇总数据并计算每个员工在每个月的总销售额。
创建和插入数据
-- 创建 monthly_sales 表
CREATE TABLE monthly_sales(
empid INT,
amount INT,
month VARCHAR
);
-- 插入销售数据
INSERT INTO monthly_sales VALUES
(1, 10000, 'JAN'),
(1, 400, 'JAN'),
(2, 4500, 'JAN'),
(2, 35000, 'JAN'),
(1, 5000, 'FEB'),
(1, 3000, 'FEB'),
(2, 200, 'FEB'),
(2, 90500, 'FEB'),
(1, 6000, 'MAR'),
(1, 5000, 'MAR'),
(2, 2500, 'MAR'),
(2, 9500, 'MAR'),
(1, 8000, 'APR'),
(1, 10000, 'APR'),
(2, 800, 'APR'),
(2, 4500, 'APR');
使用 PIVOT
现在,我们可以使用 PIVOT
操作来计算每个员工在每个月的总销售额。我们将使用 SUM
聚合函数来计算总销售额,并且 MONTH 列将被旋转以创建每个月的新列。
SELECT *
FROM monthly_sales
PIVOT(SUM(amount) FOR MONTH IN ('JAN', 'FEB', 'MAR', 'APR'))
ORDER BY EMPID;
输出:
+-------+-------+-------+-------+-------+
| empid | jan | feb | mar | apr |
+-------+-------+-------+-------+-------+
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
+-------+-------+-------+-------+-------+