我有一行顯示包機旅行copilots,並非每個包機旅程都有copliot。SQL不爲空的行的百分比
我很難找出如何去做這件事。
我想我會得到該行的值不是空值(意味着有一個copliot),然後除以總數。我不知道如何分割它,我如何得到該行中的總行數。我可以對它進行硬編碼,但如果有更多的數據輸入到數據庫中,這將無濟於事。
有沒有一種方法來計算該行中的列數?
感謝
我有一行顯示包機旅行copilots,並非每個包機旅程都有copliot。SQL不爲空的行的百分比
我很難找出如何去做這件事。
我想我會得到該行的值不是空值(意味着有一個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;
謝謝,我將如何將數字格式化爲2位小數? – user214577 2013-04-21 04:43:56
@ user214577。 。 。最簡單的方法是轉換爲固定的數字類型,例如'select cast(100.0 * count(copliot))/ count(*)as decimal(6,2))''。 – 2013-04-21 12:55:41