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

Write a query to display the total month wise sales amount received in the past 1 year

Table Structure编写查询以显示过去 1 年收到的按月销售总额。显示销售月份、总销售额等详细信息。为检索到的销售月份提供 alias_name 作为 MONTH,为销售额提供 TURN_OVER。按金额降序排列结果。

(提示:使用 table Sales_info。使用 to_char 检索月份。净额计算销售额。使用 sysdate 计算过去 1 年的销售额。DATA IS区分大小写。)

我编写的代码正在获取我所有年份的销售数据。

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

我不会为您做功课,但这里列出了您的查询中目前缺少的内容:

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

The code I have written is fetching me all years sales data

不,目前的查询只会为您提供恰好在一年前的当前日期时间发生的销售额,这可能是 0 条记录

select to_char(Sales_Date,'MON')"月", Net_Amount 作为 TURN_OVER 来自 Sales_Info 其中 Sales_Date > add_months(Sysdate,-12) 按 Net_Amount desc;

排序

你很接近。您缺少的是 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');

请注意,查询仍然存在一些重大问题。例如,我真的不喜欢在您所做的事情中使用月份名称。它省略了年份。事实上,上面的查询将合并当前月份和去年同月的数据。

我会选择 完整 个月。并使用 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".

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

答案将是:

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;