我要编写的查询遇到一些麻烦。
我有一个表,该表包含文件及其大小(以字节为单位)。看起来像这样:
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);