2016-08-27 172 views
0

使用SQL代码SQL格式化百分比

select table.column, count(*) * 100.0/sum(count(*)) over() 
from table 
group by table.column 

我想,因为我在一个大DB工作,使用此功能的效率。该函数生成的总和为100的百分比值。我找不出一个简单的方法来仅生成真值(1)或列中行数的总和值。有没有一种简单的方法可以做到这一点,还是我需要完全使用不同的功能?

示例数据集中会

N, Bit 
0 | 0 
1 | 0 
2 | 1 
3 | 0 
4 | 0 
5 | 1 

这就是我正在真位的百分比位,空表。 N只代表Number。

+1

你能提供输入和输出数据集吗? –

+0

以示例更新。希望它更具体! –

+0

您正在使用哪个DBMS? SQL Server? MySQL的? –

回答

1

如果你只需要知道真实的比特率,只是这样做:

SELECT COUNT(NULLIF(Bit, 0))/CONVERT(Decimal, COUNT(*)) 
FROM Table 

如果您需要了解其他列真位的percentaje(N在这种情况下),你需要这样的东西:

SELECT N, COUNT(NULLIF(Bit, 0))/t2.C 
FROM Table, (SELECT CONVERT(Decimal, COUNT(*)) C FROM Table) t2 
GROUP BY N, C 
+0

谢谢,完美的作品。 –

0

使用SUM来计算真位。

SELECT 
    group_column, 
    100.0 * SUM(CASE WHEN bit_column<>0 THEN 1 ELSE 0 END)/COUNT(*) AS p 
FROM myTable 
GROUP BY group_column 
+0

有这个麻烦的,因为你不能总结的位值的解决方案。铸造似乎毁了结果,不管怎样,我的输出仍然产生0和1的百分比值。 –

+0

不确定您的转换不起作用的原因。根据这个[数据类型转换表](https://msdn.microsoft.com/en-us/library/ms191530.aspx),一个“位”列应该可以转换为数字类型。希望它能与CASE WHEN一起工作。 –