gpt4 book ai didi

mysql - 选择任何记录中不为空的列

转载 作者:行者123 更新时间:2023-11-30 00:04:55 24 4
gpt4 key购买 nike

我需要分析 MySQL 表并希望确定所有不包含 NULL 、 0 或该表中任何记录中的空字符串。我不知道如何做到这一点,因为 MySQL 希望我选择语句开头的列。我想我可以将 table 旋转 90°,然后做类似的事情

SELECT column_header FROM rotated_table WHERE record_1 <> NULL AND record_2 <> NULL AND [...]

但这似乎需要大量工作。有没有更简单的方法来获取我需要的信息?

更新示例:

表1:

name        street      zip
MyName 1st Ave. 1000
OtherName 2nd Street NULL

我的声明现在应该显示如下内容:

name        street
MyName 1st Ave.
OtherName 2nd Street

因为 zip 列包含 NULL值(value)。如果有一个额外的行,例如

name        street      zip
MyName 1st Ave. 1000
OtherName 2nd Street NULL
NULL Foo blvd. 3453

它应该返回

street
1st Ave.
2nd Street
Foo blvd.

因为namezip至少包含一个NULL值。

最佳答案

您可以利用 COUNT 忽略 NULL 值的行为来发挥自己的优势。

从行数中减去您正在检查的列数。任何返回 0 值的列都不包含 NULL 值。您需要使用 CASE 语句将任何您认为“空”的值转换为 NULL

这种方法还消除了复制整个表格以“旋转”它的需要。

我举了一个例子here in SQLFiddle这应该适合你。

这是my SQLFiddle example的内容如果链接无法使用:

CREATE TABLE address
(
address int auto_increment primary key,
street1 varchar(20),
street2 varchar(20),
city varchar(20),
state varchar(20),
zip int,
comment varchar(20)
);

INSERT INTO address
(street1, street2, city, state, zip, comment)
VALUES
('123 Main St.', null, 'Cleveland', 'OH', 44123, ''),
('1313 Mockingbird Ln.', null, 'Cleveland', 'OH', 0, 'Unknown zip'),
('321 Main St.', 'Apt #1', 'Cleveland', 'OH', 44123, ''),
('321 Main St.', 'Apt #2', 'Cleveland', 'OH', 44123, '');

SELECT
COUNT(*) rows, -- not really needed, you can remove this
COUNT(*) - COUNT(CASE ad.street1 WHEN '' THEN NULL ELSE ad.street1 END) empty_street1,
COUNT(*) - COUNT(CASE ad.street2 WHEN '' THEN NULL ELSE ad.street2 END) empty_street2,
COUNT(*) - COUNT(CASE ad.city WHEN '' THEN NULL ELSE ad.city END) empty_city,
COUNT(*) - COUNT(CASE ad.state WHEN '' THEN NULL ELSE ad.state END) empty_state,
-- Change the value being compared based on the column type. Strings '', numbers 0, etc.
COUNT(*) - COUNT(CASE ad.zip WHEN 0 THEN NULL ELSE ad.zip END) empty_zip,
COUNT(*) - COUNT(CASE ad.comment WHEN '' THEN NULL ELSE ad.comment END) empty_comment
FROM address ad;

结果是:

ROWS    EMPTY_STREET1   EMPTY_STREET2   EMPTY_CITY  EMPTY_STATE     EMPTY_ZIP   EMPTY_COMMENT
4 0 2 0 0 1 3

关于mysql - 选择任何记录中不为空的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com