【问题标题】:SQL How to group data into separate month columnsSQL如何将数据分组到单独的月份列中
【发布时间】:2020-12-03 14:50:34
【问题描述】:

所以我运行这个查询来获取客户的姓名、订购的总金额以及他们提交的订单数量。通过这个查询,我得到了他们从 3 月到 7 月的全部历史记录,我想要的是名称、3 月总金额/订单数、4 月总金额/订单数、可能总金额/订单数,......等等


SELECT customer_name,MONTH(created_on), SUM(amount), COUNT(order_id)
FROM customer_orders
WHERE created_on BETWEEN '2020-03-01' AND '2020-08-01' 
GROUP BY customer_name, MONTH(created_on)

【问题讨论】:

  • 您的查询似乎符合您的要求。

标签: sql analysis orders


【解决方案1】:

如果您想要单独的中的值,则使用条件聚合:

SELECT customer_name,
       SUM(CASE WHEN MONTH(created_on) = 3 THEN amount END) as march_amount,
       SUM(CASE WHEN MONTH(created_on) = 3 THEN 1 ELSE 0 END) as march_count,
       SUM(CASE WHEN MONTH(created_on) = 4 THEN amount END) as april_amount,
       SUM(CASE WHEN MONTH(created_on) = 4 THEN 1 ELSE 0 END) as april_count,
       . . .
FROM customer_orders
WHERE created_on >= '2020-03-01' AND
      created_on < '2020-08-01' 
GROUP BY customer_name;

请注意,我更改了日期过滤器,因此它不包括 2020-08-01。

【讨论】:

  • 谢谢!我添加了其余几个月的 SUM 案例,但我收到此错误“错误代码:1064。您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法靠近'FROM rv_customer_orders WHERE created_on >= '2020-03-01' AND created_on
  • @Neykof。 . . on 子句之前可能有一个逗号。
  • 我正在做一些数据验证,当我运行查询时,我意识到它缺少一些订单。有没有什么原因会导致某些订单被跳过你能想到的?
  • @Neykof。 . .它会跳过不符合created_on 条件的订单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2019-08-17
  • 2019-12-05
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多