我有一排显示包机旅行的副本,而不是每次包机旅行都有一个copliot。
我很难弄清楚如何解决这个问题。
我想我必须得到该行中非空值(意味着有一个copliot)的值,然后除以总数。我不知道如何划分它,我将如何获得该行中总行数。我可以对其进行硬编码,但如果有更多数据输入数据库,那将无济于事。
有没有办法只计算该行中的列数?
由于
答案 0 :(得分:4)
在标准SQL中,您可以执行以下操作:
select (100.0*count(copilot))/count(*)
from t
在SQL中,表达式count(copilot)
计算非NULL值的数量。表达式count(*)
是总行数。
在某些版本的SQL中,除以两个整数会产生一个整数。所以,1/2 = 0,而不是0.5。为了确保非整数除法,“100”表示为非整数常量而不是100
。
答案 1 :(得分: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;