MySQL按列列出COUNT NULL内容,按列分组

Sla*_*lam 7 mysql sql null field count

如何按字段/列计算非空条目?我看到几个按行计数的答案,但不能破解如何对列进行操作.

输入:

?????????????????????????????????
? id ? field1 ? field2 ? field3 ?
? 1  ? do     ? re     ? me     ?
? 2  ? fa     ?        ? so     ?
? 3  ? la     ? te     ?        ?
? 4  ? da     ? re     ?        ?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

输出:

id       4
field1   4
field2   3
field3   2
Run Code Online (Sandbox Code Playgroud)

我正在尝试在我正在迁移的非常脏的数据库中查看字段使用情况.这个数据库中有大约50列,所以我正在寻找一种不涉及键入每个列名的方法.

我可能还必须将该搜索扩展为非NULL&is-not-empty&≠0&≠"no",因为数据存储不一致 - 某些字段从未使用过,但自动填充为"no".

这个答案看起来很接近我需要的但是生成了一个SQL错误而且我没有足够的声誉来评论:SQL中每列中的NULL值的计数

Gor*_*off 3

只需使用count()

select count(field1), count(field2), count(field3)
from table t;
Run Code Online (Sandbox Code Playgroud)

这就是它的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>;
Run Code Online (Sandbox Code Playgroud)

请注意,这使用了鲜为人知的group_concat()获取多个字符串参数的功能。