假设这个数据:
id firstname surname val1 val2 val3
1 joe blogs 1 (null) (null)
2 jane doe (null) 2 5
3 bobby tables (null) (null) (null)
我想要一个返回的查询:
id count_non_null_vals
1 1
2 2
3 0
COUNT
并且SUM
显然不起作用(如果他们这样做,请教育我!),虽然我们有GREATEST
and作为/LEAST
的行内类似物,但我找不到类似的东西.MAX
MIN
COUNT
我可以制作一个可怕的嵌套IF
s 等庞然大物,但在我的真实世界遗留示例中有 30 个这样的列,所以我宁愿能够做COL_COUNT(val1, val2, val3...
等
谢谢!
直接来自MySQL 文档
只需在每列上使用COUNT()函数并最后将它们相加
您可以使用 PHP/Python/Java 来制作 SQL,因为您有 30 列。
更新 2021-09-20 11:45 EDT
我决定真的把这个写出来。这是我所做的:
我提出的查询
您的样本数据
您的样本数据已加载
你的桌子
我提出的查询已执行
大警告
我不得不将会话的 sql_mode 设置为空白,因为 MySQL 不喜欢进行这种性质的聚合查询。否则它会抱怨无效的 GROUP BY。
更新 2021-09-20 12:03 EDT
对于运行 5.7/8.0 的用户,您可以在会话中禁用 sql_mode,运行查询并将其重新设置......