2013-04-20 118 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;