对SUM和COUNT的SQL查询

时间:2016-05-10 10:17:12

标签: sql

我正在使用查询来获得一些我希望使我的应用程序正常工作的结果,但我已经做了一些测试,我发现一些结果不正确。我正在使用Microsoft Visual Studio中的数据库。这是我实际运行的查询

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

我得到了这个结果

enter image description here

但是如果你对Percentagem列的每一行进行求和,它将不会给出100%。你知道我的意思?

这是我在这里添加.0之后得到的结果 ((COUNT(Filetype) * 100.0) / (SELECT COUNT(*) FROM infofile))  但我不想得到100%100.0000000

的结果

1 个答案:

答案 0 :(得分:0)

看起来您正在使用使用整数除法的SQL Server。这解释了结果失败的原因。您可以使用小数点来解决这个问题。

此外,您可以使用grouping sets获取总数而不是联合,并使用AVG()简化计算:

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