2009-10-15 94 views
0

我在Oracle 10g上。 我有一张表,其中包含过去一年中存储在系统中的所有文件。 我想统计每月存款,按文件大小对它们进行分组。例如Oracle 10g:按文件大小分组的每月统计信息

0-1m 
1m-10m 
10m-100m 
100m + 

所以我的结果会是什么样子:

Month, 0-1m, 1m-10m, 10m-100m, 100mplus 
2009-03, 999, 999, 999, 999 

我想用Oracle的解析函数,但他们不熟悉我。

您的帮助将不胜感激。

更新: 我有这个疑问,给了我一个平坦的列表。

select mois, groupement, count(*) nb 
from 
    (
    select to_char(vercdate,'YYYY-MM') mois, 
      case 
      when datasize > 1024*1024*1024 then 'Go' 
      when datasize > 1024*1024*100 then '100Mo' 
      when datasize > 1024*1024*10 then '10Mo' 
      when datasize > 1024*1024 then '1Mo' 
      else '0Mo' 
      end groupement 
    from table 
    where lower(filetype) = 'pdf' 
) 
where groupement <> '0Mo' 
GROUP by mois, groupement 

这给类似:

2007-08 1Mo 745 
2007-08 10Mo 48 
2007-09 1Mo 973 
2007-09 10Mo 175 
2007-09 100Mo 1 
2007-10 1Mo 913 
2007-10 10Mo 64 
2007-11 1Mo 828 
2007-11 10Mo 71 
2007-12 1Mo 456 
2007-12 10Mo 24 
2007-12 100Mo 1 
2008-01 1Mo 693 

现在我必须作出分析部。

回答

1

我没有看到分析的一部分 - 它只是看起来像你需要透视数据,就像这样:

WITH example AS (
    SELECT EXTRACT(YEAR FROM t.vercdate) 'y', 
      EXTRACT(MONTH FROM t.vercdate) 'm', 
      CASE 
       WHEN t.datasize > 1024*1024*1024 THEN 'Go' 
       WHEN t.datasize > 1024*1024*100 THEN '100Mo' 
       WHEN t.datasize > 1024*1024*10 THEN '10Mo' 
       WHEN t.datasize > 1024*1024 THEN '1Mo' 
       ELSE '0Mo' 
      END groupement 
     FROM TABLE t 
     WHERE LOWER(t.filetype) = 'pdf') 
SELECT t.mois, 
     CASE WHEN t.groupement = '1Mo' THEN t.nb ELSE NULL END '0-1m', 
     CASE WHEN t.groupement = '10Mo' THEN t.nb ELSE NULL END '1m-10m', 
     CASE WHEN t.groupement = '100Mo' THEN t.nb ELSE NULL END '10m-100m', 
     ...etc... 
    FROM (SELECT e.y || '-' || e.m mois, 
       groupement, 
       COUNT(e.*) 'nb' 
      FROM example e 
     WHERE e.groupement != '0Mo' 
     GROUP BY e.y, e.m, e.groupement) t 

参考:EXTRACT

+0

感谢的是,我从来没有见过“WITH blah AS”或EXTRACT功能。 – darreljnz 2009-10-18 03:05:01

+0

WITH语法在Oracle中称为子查询因子分解,并且在Oracle 9i +中受支持。 – 2009-10-18 03:21:37

0

这是太多的工作从头开始做,如果。这些关键词可以帮助您解码,总结(分区依据)。

+0

感谢,这是有益的 – 2009-10-15 19:51:22