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