我的用例是计算表中每列的空计数(它有500列)..我不能手动,因为这大量的列..可以任何人请建议我如何继续这一点。 ..如何获得具有500列的表中的每列的空计数?
回答
对于任何给定列就可以了,当然,只是运行:
select count(1) from column_name where column_name is null
500列,不过,你肯定会想以编程方式创建查询。你有两个选择:哪一个更快将取决于你的表有多大以及你的列是如何编码的。
选项1:列逐列法
如果您运行以下查询(与WHERE tablename='yourtable'
而不是“用户”),输出本身是可以运行来获得你的答案查询。
SELECT 'select \'spacer\' AS column_name, 0 AS null_count ' union all
SELECT 'union all select \'' || "column" || '\', count(1) from ' || tablename || ' where ' || "column" || ' is null'
FROM pg_table_def
WHERE tablename = 'users'
AND NOT "notnull"
选项2:一行一行地方法
此查询的输出也会给你空计数(一定要的users
两个实例更改为自己的表名!)
SELECT 'select' UNION ALL SELECT 'count(nvl2(' || "column" || ',null,1)) as ' || "column" || ', '
FROM pg_table_def
WHERE tablename = 'users'
AND NOT "notnull"
UNION ALL
SELECT 'null as spacer from users '
第二个选项使用两个奇特的功能。首先,count(exp)
将计算exp
不为null的实例的数量。
其次,更令人困惑的是:nvl2(exp, val1, val2)
方法将返回val1,如果exp不是null,并返回val2,如果它为null。所以nvl2(exp,null,1)
相当于nullif(exp is not null)
。这意味着count(exp)
将计算exp的非空事件,而count(nvl2(exp,null,1))
将计数exp的空事件。
感谢您的快速反应您可以请给我一个小例子?为选项1查询 –
非常感谢它为我工作...... :) –
我的编辑器(DataGrip)很确定它不喜欢选项一中第一行的结尾(SELECT ... union all),而且redshift返回一个错误“在输入结束时出现无效的语法错误,是单个查询的全部内容还是我有'第二部分(SELECT ....“notnull”)返回我期待的内容 – DaveRGP
- 1. 如何获得集合的空列表?
- 2. 如何获得具有总和的列
- 3. 列表清单,我如何计算每个列表中的具体数字?
- 4. SQL计数每列的所有表中的所有空的SYS表
- 5. 获得只有空值列的列名
- 6. 获得通用列表项的计数
- 7. 如何返回其他列中每个值具有唯一计数的列
- 8. 如何获得列表中所有密钥的密钥列表?
- 9. 如何获得列中唯一值的表计数
- 10. 如何获得具有核心数据的列的平均值?
- 11. 如何获得文件的列表,每有octokit和C#提交
- 12. 反应:如何获得列表中的字典数组列表
- 13. 如何获得每列有多列的顶层元素?
- 14. 如何获得具有给定标签ID的线程列表?
- 15. 如何获得具有特定值的散列表键?
- 16. 如何获得每小时登录用户总数的列表?
- 17. 如何获得wordpress空内容列表
- 18. 用pentaho计算每列的空值数
- 19. 如何获得非空的第一列
- 20. SQL-如何获得和列中的每个总和列
- 21. 如何获得计算列的时间
- 22. 如何设计具有单列标题的多列子报表?
- 23. 如何获得sqlite 3中给定表的所有列名的列表? (表可能是空的)
- 24. 计算列表中的具体数字
- 25. postgresql - 表中每列的计数(无空值)
- 26. 如何获得喜欢facebook页面的每个人的列表
- 27. 如何获得在字符串列表中具有最大值的表达式?
- 28. 在PowerShell中的空列表上计数
- 29. 如何获得其中具有最小值的列
- 30. 如何获得在列中具有最大值的行?
使用电子表格构建查询。但是由于RedShift是一个列式数据库,如果查询需要很长时间,请不要感到惊讶。 –
你有多少行? –
近800万行有 –