获取通过计算空值完成的列的百分比

时间:2010-07-26 19:44:56

标签: sql mysql

我有一个包含允许空值的列的表。如果值为null则不完整。我想计算完成百分比。

这可以通过SQL在MySQL中完成,还是应该获取总条目和总空条目并计算服务器上的百分比?

无论哪种方式,我都非常困惑我需要如何分离variable_value以便我可以得到它的总结果以及它的总NULL结果。

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

这为我提供了variable_value为NULL的所有游戏。我如何扩展这个以使我得到TOTAL游戏或游戏NOT NULL以及它?

表架构:

id(INT Primary Auto-Inc)

category_id(INT)

variable_value(TEXT Allow Null Default:NULL)

3 个答案:

答案 0 :(得分:18)

将“Count”与列名一起使用时,不包括空值。所以要使计数或百分比不为空,只需这样做......

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'

答案 1 :(得分: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()进行一些转换,以便获得小数。

答案 2 :(得分:2)

要计算与WHERE语句匹配的条目数,请使用COUNT(*)

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

如果您想在一个语句中同时将总行数和变量值为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)