有没有一种方法可以获取表示一行中NULL字段数的列?这将在SELECT语句中.
例如:
Field1 Field2 Num_Null ----------------------- NULL "A" 1
@H_502_10@更新:我想要此查询,以便我可以基于给定书的有多少会员销售进行排序.因此,无论哪个会员,拥有3个会员的排名都会高于拥有2个会员的排名.我的数据库中大约有七个会员,并且会不断增长.因此,任何要求指定每个会员字段的查询都可能太长
桌子:
Affiliates_Cache-主键是Affiliate_ISBN,具有该书在各个分支机构上的价格(如果不存在,则为NULL). Affiliates_Cache是我要计算NULL数的那个
最佳答案
我不确定是否有更整洁的方法,但这应该可行:
SELECT Field1,Field2,ISNULL(Field1) + ISNULL(Field2) Num_Null FROM YourTable;
@H_502_10@测试用例:
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);
@H_502_10@结果:
+--------+--------+----------+ | Field1 | Field2 | Num_Null | +--------+--------+----------+ | NULL | A | 1 | | B | C | 0 | | B | NULL | 1 | | NULL | NULL | 2 | +--------+--------+----------+ 4 rows in set (0.00 sec)
@H_502_10@更新:除了更新的问题:
如果表中的列看起来像affiliate_1,affiliate_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;
@H_502_10@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;
@H_502_10@