Mysql销售表按客户分组按月列显示透视查询

标签 mysql database pivot-table

我有一个包含以下列的销售表:

|  Customer_Id | amount |  date  |

customer_id 对数据进行分组并在不同的月份列上显示每个 Customer_id(每个 Customer_id 一行)的每月总金额 (SUM) 的最佳方式是什么?

所需的输出类似于:

Customer     |January    | February   | March       | ....

Customer_id  |SUM amount | SUM amount | SUM amount | ....

我相信在 Sql 中这叫做数据透视表。

¡谢谢!

最佳答案

假设您有下表:

mysql> select * from sales;
+-------------+--------+------------+
| customer_id | amount | date       |
+-------------+--------+------------+
|           1 |     12 | 2015-01-01 |
|           1 |      1 | 2015-01-02 |
|           1 |    663 | 2015-02-12 |
|           2 |     22 | 2015-01-03 |
|           2 |     21 | 2015-02-12 |
|           2 |     11 | 2015-02-12 |
|           2 |      9 | 2015-04-12 |
+-------------+--------+------------+

您可以使用此查询来执行此操作:

SELECT
  customer_id,
  sum(if(month(date) = 1, amount, 0))  AS Jan,
  sum(if(month(date) = 2, amount, 0))  AS Feb,
  sum(if(month(date) = 3, amount, 0))  AS Mar,
  sum(if(month(date) = 4, amount, 0))  AS Apr,
  sum(if(month(date) = 5, amount, 0))  AS May,
  sum(if(month(date) = 6, amount, 0))  AS Jun,
  sum(if(month(date) = 7, amount, 0))  AS Jul,
  sum(if(month(date) = 8, amount, 0))  AS Aug,
  sum(if(month(date) = 9, amount, 0))  AS Sep,
  sum(if(month(date) = 10, amount, 0)) AS Oct,
  sum(if(month(date) = 11, amount, 0)) AS Nov,
  sum(if(month(date) = 12, amount, 0)) AS `Dec`
FROM sales
GROUP BY customer_id;

输出:

+-------------+------+------+------+------+------+------+------+------+------+------+------+------+
| customer_id | Jan  | Feb  | Mar  | Apr  | May  | Jun  | Jul  | Aug  | Sep  | Oct  | Nov  | Dec  |
+-------------+------+------+------+------+------+------+------+------+------+------+------+------+
|           1 |   13 |  663 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |
|           2 |   22 |   32 |    0 |    9 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |    0 |
+-------------+------+------+------+------+------+------+------+------+------+------+------+------+

关于Mysql销售表按客户分组按月列显示透视查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734019/

相关文章:

php - PHP/MySQL与数据库的连接

mysql - 用户、角色、权限和特定组 RBAC?

asp.net - 您如何看待 Postgres 和 Firebird 数据库?

Excel VBA : PivotCaches. 创建类型不匹配

MySQL 选择数据透视表中符合我的条件的行

MySQL 'order clause' 中的未知列

mysql - 如何逐行检查mysql表中记录的出现

php - 如何使用 PHP 将 SQL 查询结果存储在变量中?

mysql - 别名是否分配功能值?

MySQL如何透视数据以显示数据库中属于多个组的用户