场景:我试图创建一个输出矩阵,其中在第一列中有源表的所有列名(字段),然后是原始字段列的所有空值之和。
前任:
Original Table:
Id1 Code Range
aa 33 null
ab 12 001
ac 53 001
ad null null
null 36 002
想要的输出:
Fields #ofnull #ofnonnull
Id1 1 4
Code 1 4
Range 2 3
为此,我有一个检索原始矩阵中所有列的名称和位置的代码,还有一个计算空值/非空值的代码片段。
问题:我不知道如何将它们串在一起,并通过一个查询获得这个输出。我试着四处搜索,但大多数答案都是关于计算空值,而不是关于向查询输入列列表的过程。
问题:有可能这样做吗?或者我必须手动输入每个列名的查询吗?
迄今为止的代码:
select
`ordinal_position`,
`column_name`,
from `dev1`.`info`
where `table_schema` = 'dev1'
and `table_name` = 'data1'
order by `ordinal_position`;
select
count(1)
from `dev1`.`data1`
where Id1 is null;
-- where Id1 is not null;
2条答案
按热度按时间r6l8ljro1#
一种方法使用一系列联合:
演示
x4shl7ld2#
你可以试着用
UNION ALL
```SELECT
field,
COUNT(CASE WHEN val IS NULL THEN 1 END) AS
#ofnull
,COUNT(CASE WHEN val IS NOT NULL THEN 1 END) AS
#ofnotnull
FROM
(
SELECT 'Id1' AS field, Id1 AS val FROM yourTable
UNION ALL
SELECT 'Code', Code FROM yourTable
UNION ALL
SELECT 'Range',
Range
FROM yourTable) a
GROUP BY field;