mysql:分组使用带有DATE_FORMAT或Quarter()函数的quartlerly报告中的date_created

时间:2019-04-08 02:55:26

标签: mysql

在我的项目中,正在为客户订单的收入/销售额生成月度报告。 这是有关我当前的报告生成方式工作方式的sql小提琴。 每月报表sqlfiddle:http://sqlfiddle.com/#!9/2ca03a/7

查询月度报告

SELECT SUM(price) as `Ordered total $`, date_created,
DATE_FORMAT(date_created, '%X - %b') as `Month`, COUNT(*) as `Total Orders` 
FROM orders WHERE class_id IN (1,2) 
GROUP BY DATE_FORMAT(date_created, '%X-%m');

现在,我需要对其进行修改以按季度而不是按月生成报告。

我发现我可以使用mysql quarter()函数。我试过使用它,但是没有按预期工作。 这是我尝试过的季度sqlfiddle的内容:http://sqlfiddle.com/#!9/2ca03a/6

查询我尝试过的季度报告

SELECT SUM(price) as `Ordered total $`, date_created,
 quarter(date_created) as `Quarter`,
 COUNT(*) as `Total Orders` 
 FROM orders WHERE class_id IN (1,2)
 GROUP BY
 quarter(date_created);

正如我在第二个sqlfiddle中看到的那样,mysql quarter()函数没有获得所有年份的季度记录。

是否可以修改DATE_FORMAT()函数以获取季度报告?或如何使用mysql的quarter()函数?

1 个答案:

答案 0 :(得分:1)

您可以使用YEAR()函数来获取从日期开始的年份,并使用CONCAT来获取到季度的年份,从而为您提供可以按以下方式分组的年/季度值:

SELECT SUM(price) as `Ordered total $`, date_created,
CONCAT(YEAR(date_created), ' - ', QUARTER(date_created)) as `Quarter`,
COUNT(*) as `Total Orders` 
FROM orders WHERE class_id IN (1,2)
GROUP BY `Quarter`

Updated SQLFiddle