如何在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
    表中根本没有相应的条目
  • 而且,
    Order
    在MySQL中是一个很好的例子。您应该将表名更改为其他名称。如果您不想这样做,您可以在它周围使用倒勾(`)。而且,这是一个很好的实践
尝试以下查询(在MySQL中):

    当然,你只想考虑那些产品,至少有一些销售。您可以将
    左连接
    更改为
    内部连接
  • 此外,还可以更改联接中表的顺序
在这种情况下,请尝试以下操作(在MySQL中):


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