mysql创建包含null和not null之和的表

vtwuwzda  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(352)

场景:我试图创建一个输出矩阵,其中在第一列中有源表的所有列名(字段),然后是原始字段列的所有空值之和。
前任:

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;
r6l8ljro

r6l8ljro1#

一种方法使用一系列联合:

SELECT
    'Id1' AS Fields, 
    COUNT(CASE WHEN Id1 IS NULL THEN 1 END) AS NoNull,
    COUNT(Id1) AS NoNonNull
FROM yourTable
UNION ALL
SELECT 'Code', COUNT(CASE WHEN Code IS NULL THEN 1 END), COUNT(Code)
FROM yourTable
UNION ALL
SELECT 'Range', COUNT(CASE WHEN `Range` IS NULL THEN 1 END), COUNT(`Range`)
FROM yourTable;

演示

x4shl7ld

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;

相关问题