Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zählen Sie die Anzahl der NULLen in einer Zeile

Ich bin mir nicht sicher, ob es bessere Methoden gibt, aber das sollte funktionieren:

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

Testfall:

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

Ergebnis:

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

AKTUALISIERUNG: Weiter zur aktualisierten Frage:

Wenn Sie Spalten in Ihrer Tabelle haben, die wie affiliate_1 aussehen , affiliate_2 usw., ist dies selten eine gute Idee, da Sie Daten mit den Metadaten mischen würden. Im Allgemeinen besteht eine empfohlene Lösung darin, eine andere abhängige Tabelle für die Beziehungen zwischen Benutzern und Partnern zu verwenden, wie im folgenden Beispiel:

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;

Sortieren Sie dann die users Die Tabelle nach der Anzahl der Affiliates sieht in etwa so aus:

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;

Die Vorteile sind zahlreich, aber am wichtigsten ist, dass Abfragen wie die oben genannten leicht zu schreiben und flexibel genug sind, um mit einer beliebigen Anzahl von Partnern zu arbeiten (und nicht durch die Anzahl der zugewiesenen Spalten begrenzt).