sql - 计算一行中的 NULL 数

标签 sql mysql select null

有没有办法得到一个列,指示一行中 NULL 字段的数量?这将在 SELECT 语句中。

例如:

Field1  Field2  Num_Null
-----------------------
NULL     "A"      1

更新:我想要这个查询,这样我就可以根据给定图书的附属公司销售额进行排序。因此,无论是哪一个,拥有 3 个分支机构的排序都会比拥有 2 个更高。我的数据库中大约有 7 个分支机构,而且这个数量还在增加。因此,任何要求指定每个关联字段的查询都可能太长

表格:

Affiliates_Cache - 主键是 Affiliate_ISBN,包含各个附属机构的图书价格(如果不可用则为 NULL)。 Affiliates_Cache 是我要计算 NULL 数量的地方

最佳答案

我不确定是否有更简洁的方法,但这应该可行:

SELECT Field1, Field2, ISNULL(Field1) + ISNULL(Field2) Num_Null
FROM   YourTable;

测试用例:

CREATE TABLE YourTable (Field1 varchar(10), Field2 varchar(10));

INSERT INTO YourTable VALUES (NULL, 'A');
INSERT INTO YourTable VALUES ('B', 'C');
INSERT INTO YourTable VALUES ('B', NULL);
INSERT INTO YourTable VALUES (NULL, NULL);

结果:

+--------+--------+----------+
| Field1 | Field2 | Num_Null |
+--------+--------+----------+
| NULL   | A      |        1 |
| B      | C      |        0 |
| B      | NULL   |        1 |
| NULL   | NULL   |        2 |
+--------+--------+----------+
4 rows in set (0.00 sec)

更新:进一步更新问题:

如果您的表中有看起来像 affiliate_1affiliate_2 等的列,这很少是一个好主意,因为您会将数据与元数据混合在一起。通常,推荐的修复方法是为用户与附属关系使用另一个从属表,如以下示例所示:

CREATE TABLE users (
   user_id int, 
   user_name varchar(100),
   PRIMARY KEY (user_id)
) ENGINE=INNODB;

CREATE TABLE users_affiliates (
   user_id int, 
   affiliate_name varchar(100),
   PRIMARY KEY (user_id, affiliate_name),
   FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;

然后按成员(member)数量对 users 表进行排序将如下所示:

SELECT    u.*, d_tb.num_aff
FROM      users
JOIN      (
             SELECT   user_id, COUNT(*) num_aff
             FROM     users_affiliates
             GROUP BY user_id
          ) d_tb ON (d_tb.user_id = u.user_id)
ORDER BY  d_tb.num_aff DESC;

优点很多,但最重要的是,它使上述查询易于编写,并且足够灵活以与任意数量的附属公司合作(不受您分配的列数限制)。

关于sql - 计算一行中的 NULL 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473778/

相关文章:

c# - 将具有 2 "left Join"和多个条件的 Sql 查询转换为 Entity Framework 查询

mysql - SQL 0 如果为负值

mysql - SQL - 计算查询生成的列的唯一值

java - 连接超时 : connect JAVA and Wampserver

mysql - 无法提供代码来回答此查询。

java - 使用 IN(...) 子句构建选择查询

Php 选择 * 喜欢的地方

php - MySQL 选择具有特定条件的分组

mysql - 获取不同值的计数

mysql - rpad 无法正常工作