如何解决这个查询问题?

时间:2016-05-10 11:19:12

标签: sql

我正在尝试完成查询以获得我真正想要的结果,但我遇到了一些问题。这是我目前正在运行的查询:

SELECT Filetype AS 'Extensão', 
COUNT(*) AS 'Nº total de extensões',
((COUNT(Filetype) * 100.0) / (SELECT COUNT(*) FROM infofile)) AS 'Percentagem (%)',
SUM(Filesize) AS 'Total(KB)'
FROM infofile 
GROUP BY Filetype
UNION ALL
SELECT '---------------',
COUNT('Nº total de extensões'),
((COUNT(Filetype) * 100) / (SELECT COUNT(Filetype) FROM infofile)), 
SUM(Filesize)
FROM infofile

Filetype列是nvarchar所以我不能按照我想要的方式使用AVG。现在查询的输出给出了总计的结果,如100.0000000000

enter image description here

2 个答案:

答案 0 :(得分:1)

如果FileType是数字:

SELECT Filetype AS [Extensão], 
       COUNT(*) AS 'Nº total de extensões',
       COUNT(*) * 100.0)/SUM(COUNT(*)) OVER () AS [Percentagem (%)],
       SUM(Filesize) AS [Total(KB)]
FROM infofile 
GROUP BY GROUPING SETS ( (Filetype), () );

认为这会做你想要的。您可能需要为最终摘要行稍微不同地计算百分比。

答案 1 :(得分:0)

联合第二部分中的列类型必须与第一部分中的列类型匹配。因为在第一部分中乘以100.0,您的百分比值将始终具有小数部分。这就是为什么最后一部分显示100.00000 - 即使如果它自己执行它也会返回。

如果要将其保留为单个联合查询,可以考虑在执行计算后将Percentage值转换为nvarchar。第一个选择中的浮点值将保持不变,而第二部分中的计算的整数结果应直接转换为字符串而不强制为浮点形式。

当然,如果您想在以后的数值计算中使用这些值,这实际上不是一个选项。