提取一个月的总天数,然后使用它来获得每天的平均销售额



嗨,我一直在做这个项目,需要得到这个。

SELECT  sf.ORDER_QNT, dd.ACTUAL_DATE, dd.MONTH_NUMBER 
FROM    sales_fact sf,
        date_dim dd
WHERE   dd.date_id = sf.date_id
AND dd.MONTH_NUMBER = 1;

结果如下:

 ORDER_QNT ACTUAL_DATE MONTH_NUMBER
---------- ----------- ------------
      1100    05/01/13            1 
       100    05/01/13            1 
       140    06/01/13            1 
       110    07/01/13            1 
       200    08/01/13            1 
       500    08/01/13            1 
       230    08/01/13            1 
       500    08/01/13            1 
       200    08/01/13            1 
        53    15/01/13            1 
        53    22/01/13            1 

现在,我想得到那个月的平均值(每天的平均值)。

SELECT  sum(sf.ORDER_QNT)/31 as AVGPERDAY
FROM    sales_fact sf,
        date_dim dd
WHERE   dd.date_id = sf.date_id
AND     dd.MONTH_NUMBER = 1;

问题是,我如何才能得到一个月的总天数,而不是31?以及如何将其应用于SELECT查询。我很擅长逻辑(c++),但这个数据库对我来说很新。顺便说一下,我使用的是Oracle11g。谢谢你的帮助。

问题是,我如何才能得到一个月的总天数,而不是31?

选择任意一种解决方案:

1。您可以在一个日期上添加一个月,并减去两个日期:

ADD_MONTHS(date_col, 1) - date_col

示例:

SQL> WITH dates AS(
  2  SELECT to_date('05/01/13','mm/dd/rr') dt FROM dual UNION ALL
  3  SELECT to_date('06/01/13','mm/dd/rr') dt FROM dual UNION ALL
  4  SELECT to_date('02/01/13','mm/dd/rr') dt FROM dual)
  5  SELECT ADD_MONTHS(dt, 1) - dt num_of_days_per_month
  6  from dates
  7  /
NUM_OF_DAYS_PER_MONTH
---------------------
                   31
                   30
                   28

或者,

  1. 您可以提取本月的最后一天:

EXTRACT(DAY FROM LAST_DAY (date_col))

示例:

SQL> WITH dates AS(
  2  SELECT to_date('05/01/13','mm/dd/rr') dt FROM dual UNION ALL
  3  SELECT to_date('06/01/13','mm/dd/rr') dt FROM dual UNION ALL
  4  SELECT to_date('02/01/13','mm/dd/rr') dt FROM dual)
  5  SELECT EXTRACT(DAY FROM LAST_DAY(dt)) num_of_days_per_month
  6  from dates
  7  /
NUM_OF_DAYS_PER_MONTH
---------------------
                   31
                   30
                   28

最新更新