2013-04-20 42 views
-1

我有一行显示包机旅行copilots,并非每个包机旅程都有copliot。SQL不为空的行的百分比

我很难找出如何去做这件事。

我想我会得到该行的值不是空值(意味着有一个copliot),然后除以总数。我不知道如何分割它,我如何得到该行中的总行数。我可以对它进行硬编码,但如果有更多的数据输入到数据库中,这将无济于事。

有没有一种方法来计算该行中的列数?

感谢

回答

3

在标准SQL中,你可以这样做:

select (100.0*count(copilot))/count(*) 
from t 

在SQL中,表达count(copilot)统计未出现NULL值的数目。表达式count(*)是行的总数。

在某些版本的SQL中,将两个整数相除会产生一个整数。所以,1/2 = 0,而不是0.5。为确保非整数除法,“100”被表示为非整数常量而不是100

+0

谢谢,我将如何将数字格式化为2位小数? – user214577 2013-04-21 04:43:56

+0

@ user214577。 。 。最简单的方法是转换为固定的数字类型,例如'select cast(100.0 * count(copliot))/ count(*)as decimal(6,2))''。 – 2013-04-21 12:55:41

0
select count(copilot is not null)*100/count(*) as copilot_percent 
from charters 

你的问题似乎表明,有在表中的多个副驾驶列。首先,这表明糟糕的数据库设计 - 你应该通过将数据库移动到他们自己的依赖表中来规范数据库。但是在这个设计中,你会怎么做:

select count(copilot1 is not null and copilot2 is not null and copilot3 is not null ...)*100/count(*) as copilot_percent 
from charters;