1

我有一排显示包机旅行的副驾驶,不是每个包机旅行都有副驾驶。

我很难弄清楚如何去做。

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

有没有办法只计算该行中的列数?

谢谢

4

2 回答 2

7

在标准 SQL 中,您可以执行以下操作:

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

在 SQL 中,表达式count(copilot)计算非 NULL 值的数量。表达式count(*)是总行数。

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

于 2013-04-20T17:51:01.710 回答
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;
于 2013-04-20T17:26:57.730 回答