2010-07-26 57 views
5

我有一個允許空值的列表。如果該值爲空,則不完整。我想計算完成的百分比。獲取通過計算空值完成的列的百分比

這能在MySQL通過SQL完成,或者我應該得到的總條目,總空條目,並計算服務器上的百分比是多少?

無論哪種方式,我在我需要如何去分離VARIABLE_VALUE這樣我就可以得到它的總成績也總NULL結果很困惑。

SELECT 
    games.id 
FROM 
    games 
WHERE 
    games.category_id='10' AND games.variable_value IS NULL 

這給了我變量_值爲NULL的所有遊戲。我該如何擴展這個功能,讓我獲得TOTAL遊戲或遊戲NOT NULL?

表模式:

ID(int主自動Inc)的

CATEGORY_ID(INT)

VARIABLE_VALUE(TEXT允許Null默認:NULL)

+0

,你能不能給我們表模式? – JNK 2010-07-26 19:55:22

回答

11

當您使用 「計數」列名稱不包含空值。因此,要獲得計數或百分比不爲空只是這樣做......

SELECT 
    count(1) as TotalAll, 
    count(variable_value) as TotalNotNull, 
    count(1) - count(variable_value) as TotalNull, 
    100.0 * count(variable_value)/count(1) as PercentNotNull 
FROM 
    games 
WHERE 
    category_id = '10' 
+2

+1:這也是我的想法 - 計算列,將數量除以非空實例的數量。我在想'SUM(COALESCE(數值,0)/ COUNT(...)'自己... – 2010-07-26 20:01:39

+0

編輯:增加了其他的 「總」 選項 – 2010-07-26 20:08:19

5
SELECT 
    SUM(CASE WHEN G.variable_value IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*) AS pct_complete 
FROM 
    Games G 
WHERE 
    G.category_id = '10' 

你可能需要做的SUM(),使你得到一個小數部分鑄造。

+0

+1:見我對卡特的評論 – 2010-07-26 20:02:17

+0

是啊,我給了他+1我也喜歡聚合超過NULL可以導致更簡潔的代碼,但默認情況下,當我開始輸入我去冗長的:) – 2010-07-26 20:04:20

2

來算的條目數量符合WHERE語句,使用COUNT(*)

SELECT COUNT(*) AS c FROM games WHERE games.variable_value IS NULL 

如果你想兩行的總數和那些VARIABLE_VALUE是NULL在一條語句,嘗試GROUP BY

SELECT COUNT(variable_value IS NULL) AS c, (variable_value IS NULL) AS isnull FROM games GROUP BY isnull 

返回類似

c | isnull 
============== 
12 | 1 
193 | 0 

==> 12項具有NULL該列,193沒有帶

==>比例:12 /(12 + 193)