2017-02-27 115 views
0

对不起,但我无法获得列“%”的2位小数结果。计算字段中的十进制数2

任何人都可以帮助我吗?

这是查询:

SELECT 
    "column1" 
    COUNT("column1"), 
    COUNT("column1") * 100/(SELECT COUNT(*) FROM "table") AS "%", 
    AVG("column2") 
FROM 
    "table" 
GROUP BY 
    "column1" 
+1

用您正在使用的数据库标记您的问题。 –

+1

错字,第一次选择项目后缺少逗号。 – jarlh

+1

帮助使用帮助 - 请分享一些示例数据,您使用此查询得到的结果以及您想要得到的结果。另外,用正确的[tag:rdbms]来标记问题会有所帮助。 – Mureinik

回答

1

有些数据库做整数除法,并count()返回一个整数。你应该转换成小数点表示。我认为最简单的方法是乘以1.0。另外,你不需要子查询;您可以使用窗口函数:

SELECT "column1", COUNT("column1"), 
     COUNT("column1") * 100.0/SUM(COUNT(*)) OVER() as percent 
     AVG("column2") 
ROM "table" 
GROUP BY "column1"; 

要得到两位小数,转换为十进制类型(或字符串,但前者为标准):

SELECT "column1", COUNT("column1"), 
     CAST(COUNT("column1") * 100.0/SUM(COUNT(*)) OVER() as DECIMAL(5, 2)) as percent 
     AVG("column2") 
FROM "table" 
GROUP BY "column1"; 

另外请注意AVG()受与整数除法相同的规则。如果你想要一个有小数位的值,乘以1.0(或做一个明确的转换)。