我要编写的查询遇到一些麻烦。

我有一个表,该表包含文件及其大小(以字节为单位)。看起来像这样:

FileUrl | FileSize
------------------
xyz.docx | 2794496
qwe.ppt | 655360
asd.pdf | 1388782
...
...

我想要的是根据要定义的不同大小组找到文件数,文件总数的百分比和文件总大小的百分比。所以它应该像这样:
Size Category | Number of Files | % of Total File Count | ½ of Total File Size
------------------------------------------------------------------------------
0-1 MB        | 235             | 80%                   | 20%
1-10 MB       | 57              | 20%                   | 80%
10-50 MB
...
...

创建此类小组然后找到这些百分比的最佳方法是什么?我无法提出解决方案,而且我的在线搜索根本没有帮助。

先感谢您

最佳答案

这是一种使用apply和window函数的方法:

select v.sizecategory, count(*) as numfiles,
       (count(*) / sum(1.0 * count(*)) over () as ratio_files,
       (sum(filesize) / sum(sum(filesize) * 1.0)) over () as ratio_sizes
from t outer apply
     (values (case when t.filesize < 1000000 then '0-1 MByte'
                   when t.filesize < 10000000 then '1-10 MByte'
                   when t.filesize < 50000000 then '10-50 MByte'
                   . . .
              end)
     ) v(sizecategory)
group by v.sizecategory
order by min(t.filesize);

10-08 16:11