每天获得产品销售的平均值并计算具有正销售额的天数

时间:2014-10-11 07:58:05

标签: sql oracle oracle11g

我有这个表TARGETSALE,其中包含以下列

SELECT DATE, WEEK, BRANCH, PROD, TARGETREACH
FROM TARGETSALE
WHERE BRANCH = 1 
AND WEEK BETWEEN 52 AND 53;

DATE        WEEK    BRANCH  PROD    TARGETREACH
-------------------------------------------------------------------
01/09/2014  52      1       1        50 
02/09/2014  52      1       1       -10 
03/09/2014  52      1       1        50 
04/09/2014  52      1       1        50 
05/09/2014  52      1       1        40
06/09/2014  52      1       1       -10
07/09/2014  53      1       1        -5
08/09/2014  53      1       1         0
09/09/2014  53      1       1        10
10/09/2014  53      1       1        20
11/09/2014  53      1       1        30 
12/09/2014  53      1       1        40
13/09/2014  53      1       1         0
01/09/2014  52      1       2        20 
02/09/2014  52      1       2         0 
03/09/2014  52      1       2         0 
04/09/2014  52      1       2        10 
05/09/2014  52      1       2        20
06/09/2014  52      1       2        10
07/09/2014  53      1       2       -10
08/09/2014  53      1       2        10
09/09/2014  53      1       2       -10
10/09/2014  53      1       2        20
11/09/2014  53      1       2        20 
12/09/2014  53      1       2        40
13/09/2014  53      1       2         0
01/09/2014  52      1       3        30 
02/09/2014  52      1       3        30 
03/09/2014  52      1       3         5 
04/09/2014  52      1       3         0 
05/09/2014  52      1       3        10
06/09/2014  52      1       3       -10
07/09/2014  53      1       3       -10
08/09/2014  53      1       3       -10
09/09/2014  53      1       3        20
10/09/2014  53      1       3        10
11/09/2014  53      1       3        40 
12/09/2014  53      1       3        10
13/09/2014  53      1       3        10
“targetsales”显示销售额超过目标的数量,其中负数表示销售额低于目标价格。我该怎么做: 1.我需要获得每天所有产品的平均值。像这样:

    DATE        BRANCH  AVERAGE_SALES_OF_ALL_PRODUCT
    01/09/2014  1       33.33
    02/09/2014  1       -1.67 
    ...and so on
  1. 然后我需要另外一个查询,显示这两周内平均销售额是多少天。像这样:

    BRANCH  2WEEKS_SINCE    DAYS_WITH_POSITIVE_AVERAGE_SALES
    1       53              9
    
  2. 上面只是一个例子而不是真实的结果。 对不起,希望这不要太混乱。非常感谢你。

2 个答案:

答案 0 :(得分:2)

在Oracle中,date类型可能仍有时间组件。如果您不知道是否存在,请使用trunc()将其删除:

select trunc(date), branch, avg(targetreach)
from targetsale
group by truncdate, branch
order by 1, 2;

对于第二个查询,您要使用case

select branch, count(distinct case when targetreach > 0 then date end) as DaysWithPositiveSales
from targetsales
group by branch;

如果您知道每个分支的每个日期都有一行 - 并且日期的时间部分为空 - 则不需要distinct

答案 1 :(得分:0)

1)

SELECT TRUNC(DATE, 'DD'), BRANCH, SUM(TARGETREACH) 
FROM TARGETSALE WHERE BRANCH = 1 AND WEEK BETWEEN 52 AND 53
GROUP BY TRUNC(DATE, 'DD'), BRANCH;

2)

SELECT BRANCH, SUM(DECODE(ABS(TARGETREACH), 1, 1, 0)
FROM TARGETSALE WHERE BRANCH = 1 AND WEEK BETWEEN 52 AND 53
GROUP BY BRANCH;