Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql销售表按客户分组,按月份列显示透视查询_Mysql_Database_Pivot Table - Fatal编程技术网

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

Mysql销售表按客户分组,按月份列显示透视查询,mysql,database,pivot-table,Mysql,Database,Pivot Table,我有一个包含以下列的销售表: | Customer_Id | amount | date | 按客户id对数据进行分组,并在不同的月份列上显示每个客户id的每月总金额(每个客户id一行)的最佳方式是什么 所需的输出类似于: Customer |January | February | March | .... Customer_id |SUM amount | SUM amount | SUM amount | .... 我相信Sql,这称为透视表 “

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

|  Customer_Id | amount |  date  |
按客户id对数据进行分组,并在不同的月份列上显示每个客户id的每月总金额(每个客户id一行)的最佳方式是什么

所需的输出类似于:

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

Customer_id  |SUM amount | SUM amount | SUM amount | ....
我相信Sql,这称为透视表

“谢谢

试试这个:

SELECT `Customer_id` AS Customer,
SUM(`amount`) AS MONTHNAME(`date`)
FROM `sales`
GROUP BY YEAR(`date`), MONTH(`date`);
试试这个:

SELECT `Customer_id` AS Customer,
SUM(`amount`) AS MONTHNAME(`date`)
FROM `sales`
GROUP BY YEAR(`date`), MONTH(`date`);
试试这个代码

选择客户id、金额、月份 从销售表 按月分组

试试这段代码

选择客户id、金额、月份 从销售表
按月分组

假设您有下表:

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> 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 |
+-------------+------+------+------+------+------+------+------+------+------+------+------+------+

此查询将获得所需的结果:

SELECT Customer_id,

Sum(CASE WHEN MONTH(date) = 1 THEN amount END) AS Jan,
Sum(CASE WHEN MONTH(date) = 2 THEN amount END) AS Feb,
Sum(CASE WHEN MONTH(date) = 3 THEN amount END) AS Mar,
...

FROM table_name

GROUP BY Customer_id

感谢@shawnt00的提醒

此查询获得所需的结果:

SELECT Customer_id,

Sum(CASE WHEN MONTH(date) = 1 THEN amount END) AS Jan,
Sum(CASE WHEN MONTH(date) = 2 THEN amount END) AS Feb,
Sum(CASE WHEN MONTH(date) = 3 THEN amount END) AS Mar,
...

FROM table_name

GROUP BY Customer_id

感谢@shawnt00的提醒

MySQL为GROUPBY子句提供WITHROLLUP修饰符

。。。 按客户id分组并汇总


希望有帮助。

MySQL为GROUPBY子句提供WITHROLLUP修饰符

。。。 按客户id分组并汇总


希望能有所帮助。

如果你在Piotr的答案中这样修改每一行

sum(if(month(date) = 1, amount, 0))  AS Jan,


如果您在Piotr的答案中这样更改每一行,则当数据超过一年时,您可以拆分该表

sum(if(month(date) = 1, amount, 0))  AS Jan,



当有超过一年的数据时,您可以拆分表

您尝试过什么吗?这通常是通过分组完成的,就像在大多数答案中一样,然后是使用用例表达式的列。sumcase当monthdate=1时,则amount else null结束于1月,…通常,出于可伸缩性和灵活性的原因,数据显示问题最好在应用程序级代码(例如PHP)中处理,如果这样的代码可用。@shawnt00当mont。。。结果是否每个客户id只显示一行?您可能没有按客户id添加分组,而按定义每个客户id只显示一行。您尝试过什么吗?这通常是通过分组完成的,就像在大多数答案中一样,然后是使用案例表达式的列。sumcase当monthdate=1时,则amount else null结束于1月,…通常,出于可伸缩性和灵活性的原因,数据显示问题最好在应用程序级代码(例如PHP)中处理,如果这样的代码可用。@shawnt00当mont。。。结果是否每个客户id只显示一行?您可能没有添加“按客户id分组”,根据定义,每个客户id只显示一行。谢谢您的回答。我没有每个月的不同销售价值列。我试图从date字段创建它们。提供表结构。三列:| Customer_Id | amount | date |感谢您的回答。我没有每个月的不同销售价值列。我试图从日期字段创建它们。提供表结构。三列:|客户| Id |金额|日期|谢谢!但此查询不提供每个客户id的总和,但它会对当月的总金额进行分组。请尝试按MONTHdate、Customer id添加分组谢谢,但这并不完全是我要查找的Hanks!但此查询不提供每个客户id的总和,但它会对该月的总金额进行分组。请尝试按月添加分组日期,客户id谢谢,但不完全是我想要的伟大答案!但是我怎么能让输出为每个不同的客户id显示一行呢?去掉monthdate上的分组。我在上面的评论中提到的sum+案例是标准的SQL方法,但在其他方面我认为它们是等效的。@helloworld我编辑了我的文章,现在返回正确的数据。回答得很好!但是我怎么能让输出为每个不同的客户id显示一行呢?去掉monthdate上的分组。我在上面的评论中提到的sum+案例是标准的SQL方法,但在其他方面我认为它们是等效的。@helloworld我编辑了我的文章,现在返回正确的数据。如果您想对已接受的答案添加一个小的更改,请尝试编辑答案,而不是添加新的答案。人们通常只看第一个答案,也许是第二个,所以他们不大可能注意到你的建议。在编辑答案时,最好是在最后添加您的建议,并指出这是一个补充。如果您想在已接受的答案上添加一个小改动,请尝试编辑答案,而不是添加新答案。人们通常只看第一个答案,也许是第二个,所以他们不大可能注意到你的建议。在编辑答案时,最好是在最后添加您的建议,并指出这是一个添加