我有一个包含允许空值的列的表。如果值为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)
答案 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)