oracle 编写查询以显示过去1年中收到的按月销售总额

uqzxnwby  于 2023-02-18  发布在  Oracle
关注(0)|答案(4)|浏览(199)

Table Structure编写一个查询以显示过去1年中收到的按月销售总额。显示销售月份、总销售额等详细信息。为检索到的销售月份给予别名MONTH,为销售额指定TURN_OVER。按金额降序对结果进行排序。
(Hint:使用表Sales_info。使用to_char检索月份。使用净额计算销售额。使用系统日期计算过去1年的销售额。数据区分大小写。)
我所写的代码是获取我所有年的销售数据。

select to_char(Sales_Date,'Month')"MONTH"
Net_Amount as Turn_Over
from Sales_Info
where Sales_Date= add_months(Sysdate,-12)
ie3xauqp

ie3xauqp1#

选择to_char(Sales_Date,'MON')“MONTH”,净额作为销售信息中的周转,其中销售日期〉添加月数(系统日期,-12),按净额说明排序;

gupuwyp2

gupuwyp22#

我不打算为您做家庭作业,但以下是您的查询中当前缺少的内容的列表:

  • SELECT列表中的逗号
  • 您需要大于,而不是等于,因为您希望所有日期“大于一年前的时刻”
  • 您需要将数据分成多个组,每个组具有相同的月份,并且您需要合计该月份的所有数据,因此您的查询中需要包含单词GROUP BY和SUM。

我所编写的代码正在获取我所有的年销售数据
不,查询本身将只提供恰好在当前日期-时间(一年前)发生的销售额,可能为0条记录

vwhgwdsa

vwhgwdsa3#

您已经非常接近了,但缺少的是GROUP BY和汇总函数:

select to_char(Sales_Date, 'Month') as "MONTH"
       SUM(Net_Amount) as Turn_Over
from Sales_Info
where Sales_Date= add_months(Sysdate, -12)
group by to_char(Sales_Date, 'Month');

请注意,该查询仍然存在一些重要问题。例如,我真的不喜欢使用月份名称来执行您正在执行的操作。它忽略了年份。实际上,上面的查询将合并当前月份和去年同月的数据。
我会选择 complete months,并使用trunc()

select trunc(Sales_Date, 'MON') as "MONTH"
       SUM(Net_Amount) as Turn_Over
from Sales_Info
where Sales_Date = add_months(trunc(Sysdate, 'MON'), -12) and
      Sales_Date < trunc(sysdate, 'MON')
group by to_char(Sales_Date, 'Month')
order by "MONTH".

在现实环境中,这通常会提供更清晰、更有用的结果。此外,因为第一列实际上是日期,所以很容易排序。

ct3nt3jp

ct3nt3jp4#

ANS将:

Select to_char(Sales_Date , 'MON' ) as "MONTH" , sum(Net_Amount) as TURN_OVER 
from Sales_Info
where Sales_Date > add_months(Sysdate , -12) 
group by to_char(Sales_Date , 'MON')
order by TURN_OVER desc;

相关问题