如何在mysql中将日期转换为季度收入?
我有两张订单和产品表 要求以季度列表示表中的收入如何在mysql中将日期转换为季度收入?,mysql,sql,Mysql,Sql,我有两张订单和产品表 要求以季度列表示表中的收入 ProductId Q1 Q2 Q3 Q4 P1 30240 0 0 0 我很困惑,不能像科尔斯那样保持每季度一次。感谢您的帮助。请参阅图片以获得清晰的视图 您可能拥有多年的数据;因此,我继续使用函数按订单年份对数据进行分组 使用条件聚合函数(如和)根据特定行的分组对特定行求和 如果要获取所有产品的销售值,则需要从
ProductId Q1 Q2 Q3 Q4
P1 30240 0 0 0
我很困惑,不能像科尔斯那样保持每季度一次。感谢您的帮助。请参阅图片以获得清晰的视图
- 您可能拥有多年的数据;因此,我继续使用函数按订单年份对数据进行分组
- 使用条件聚合函数(如和)根据特定行的分组对特定行求和
- 如果要获取所有产品的销售值,则需要从
表到product
表执行Order
,因为左联接
表中可能只有很少的产品,而product
表中根本没有相应的条目Order
- 而且,
在MySQL中是一个很好的例子。您应该将表名更改为其他名称。如果您不想这样做,您可以在它周围使用倒勾(`)。而且,这是一个很好的实践Order
-
当然,你只想考虑那些产品,至少有一些销售。您可以将
左连接
更改为内部连接
mysql Oracle,你在做哪一个?如果你遇到麻烦,看看条件聚合并发布你的查询。到目前为止你都做了什么?我是mysql的新手。仍在考虑方法@Madhurbhaiyak寻找一个逻辑@Kaushiknayak你的第三点不是严格正确的,它是确保所有产品都在输出表中,不管是否有该产品的订单。谢谢Madhur,你的想法成功了。唯一的事情是在sum@Pavan如果答案解决了您的问题,请将其标记为已接受。看见
SELECT YEAR(o.order_date) AS order_year,
p.ProductId,
SUM(IF(QUARTER(o.OrderDate) = 1, o.Quantity*p.Cost, 0)) AS Q1,
SUM(IF(QUARTER(o.OrderDate) = 2, o.Quantity*p.Cost, 0)) AS Q2,
SUM(IF(QUARTER(o.OrderDate) = 3, o.Quantity*p.Cost, 0)) AS Q3,
SUM(IF(QUARTER(o.OrderDate) = 4, o.Quantity*p.Cost, 0)) AS Q4
FROM Product AS p
LEFT JOIN `Order` AS o ON o.ProductId = p.ProductId
GROUP BY order_year, p.ProductId
SELECT YEAR(o.order_date) AS order_year,
p.ProductId,
SUM(IF(QUARTER(o.OrderDate) = 1, o.Quantity*p.Cost, 0)) AS Q1,
SUM(IF(QUARTER(o.OrderDate) = 2, o.Quantity*p.Cost, 0)) AS Q2,
SUM(IF(QUARTER(o.OrderDate) = 3, o.Quantity*p.Cost, 0)) AS Q3,
SUM(IF(QUARTER(o.OrderDate) = 4, o.Quantity*p.Cost, 0)) AS Q4
FROM `Order` AS o
INNER JOIN Product AS p ON o.ProductId = p.ProductId
GROUP BY order_year, p.ProductId