Sql Oracle 10g:按文件大小分组的每月统计数据

Sql Oracle 10g:按文件大小分组的每月统计数据,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,我使用的是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, gr

我使用的是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

现在我必须做分析部分。

如果从头开始,这是太多的工作要做。这些关键词可以帮助您解码、求和(按分区)。

我看不到分析部分-看起来您需要旋转数据,如下所示:

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

参考资料:

谢谢,我以前从未见过“WITH blah AS”或提取函数。WITH语法在Oracle中称为子查询分解,在Oracle 9i+中受支持。
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