MySQL 按列 COUNT NULL 内容,按列 GROUP
MySQL COUNT NULL content by column, GROUP by column
如何按 field/column 计算非空条目?我看到了几个按行计数的答案,但无法破解如何对列进行计数。
输入:
╔════╦════════╦════════╦════════╗
║ id ║ field1 ║ field2 ║ field3 ║
║ 1 ║ do ║ re ║ me ║
║ 2 ║ fa ║ ║ so ║
║ 3 ║ la ║ te ║ ║
║ 4 ║ da ║ re ║ ║
╚════╩════════╩════════╩════════╝
输出:
id 4
field1 4
field2 3
field3 2
我正在尝试了解我正在迁移的一个非常脏的数据库中的字段使用情况。这个数据库中大约有 50 列,所以我正在寻找一种不涉及输入每个列名称的方法。
由于数据存储不一致,我可能还必须将该搜索扩展到非 NULL & is-not-empty & ≠ 0 & ≠ "no" — 有些字段从未使用过,但自动填充了"no"。
这个答案看起来很接近我需要的,但是会产生一个 SQL 错误,而且我没有足够的声誉来发表评论:Count number of NULL values in each column in SQL
只需使用count()
:
select count(field1), count(field2), count(field3)
from table t;
这就是 count()
的作用——它计算非 NULL 值。
如果您不喜欢输入名称,请使用元数据表(通常 information_schema.columns
)来获取列名称。您可以生成 SQL 作为查询,或将列名复制到电子表格中以生成代码。
编辑:
您可以使用以下方法生成代码:
select group_concat('count(', column_name, ')' separate ', ')
from information_schema.columns
where table_name = <whatever> and table_schema = <whatever2>;
请注意,这使用了鲜为人知的 group_concat()
能力来获取多个字符串参数。
SELECT count(field1) as cnt ,'field1' as field from tbl where field1 IS NOT NULL
UNION all
SELECT count(field2) as cnt ,'field2' as field from tbl where field2 IS NOT NULL
union all
SELECT count(field3) as cnt ,'field3' as field from tbl where field3 IS NOT NULL
如果上面只有 3 个固定字段 SQL 将起作用
这里是sqlfiddle
SELECT
COUNT(id),
SUM(CASE WHEN field1 IS NOT NULL THEN 1 ELSE 0 END),
SUM(CASE WHEN field2 IS NOT NULL THEN 1 ELSE 0 END),
SUM(CASE WHEN field3 IS NOT NULL THEN 1 ELSE 0 END)
FROM table1;
如何按 field/column 计算非空条目?我看到了几个按行计数的答案,但无法破解如何对列进行计数。
输入:
╔════╦════════╦════════╦════════╗
║ id ║ field1 ║ field2 ║ field3 ║
║ 1 ║ do ║ re ║ me ║
║ 2 ║ fa ║ ║ so ║
║ 3 ║ la ║ te ║ ║
║ 4 ║ da ║ re ║ ║
╚════╩════════╩════════╩════════╝
输出:
id 4
field1 4
field2 3
field3 2
我正在尝试了解我正在迁移的一个非常脏的数据库中的字段使用情况。这个数据库中大约有 50 列,所以我正在寻找一种不涉及输入每个列名称的方法。
由于数据存储不一致,我可能还必须将该搜索扩展到非 NULL & is-not-empty & ≠ 0 & ≠ "no" — 有些字段从未使用过,但自动填充了"no"。
这个答案看起来很接近我需要的,但是会产生一个 SQL 错误,而且我没有足够的声誉来发表评论:Count number of NULL values in each column in SQL
只需使用count()
:
select count(field1), count(field2), count(field3)
from table t;
这就是 count()
的作用——它计算非 NULL 值。
如果您不喜欢输入名称,请使用元数据表(通常 information_schema.columns
)来获取列名称。您可以生成 SQL 作为查询,或将列名复制到电子表格中以生成代码。
编辑:
您可以使用以下方法生成代码:
select group_concat('count(', column_name, ')' separate ', ')
from information_schema.columns
where table_name = <whatever> and table_schema = <whatever2>;
请注意,这使用了鲜为人知的 group_concat()
能力来获取多个字符串参数。
SELECT count(field1) as cnt ,'field1' as field from tbl where field1 IS NOT NULL
UNION all
SELECT count(field2) as cnt ,'field2' as field from tbl where field2 IS NOT NULL
union all
SELECT count(field3) as cnt ,'field3' as field from tbl where field3 IS NOT NULL
如果上面只有 3 个固定字段 SQL 将起作用
这里是sqlfiddle
SELECT
COUNT(id),
SUM(CASE WHEN field1 IS NOT NULL THEN 1 ELSE 0 END),
SUM(CASE WHEN field2 IS NOT NULL THEN 1 ELSE 0 END),
SUM(CASE WHEN field3 IS NOT NULL THEN 1 ELSE 0 END)
FROM table1;