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