sql >> Databasteknik >  >> RDS >> Mysql

Räkna antalet NULL i rad

Jag är inte säker på om det finns snyggare metoder, men det här borde fungera:

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

Resultat:

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

UPPDATERING: Vidare till den uppdaterade frågan:

Om du har kolumner i tabellen som ser ut som affiliate_1 , affiliate_2 , etc, detta är sällan en bra idé eftersom du skulle blanda data med metadata. I allmänhet är en rekommenderad korrigering att använda en annan beroende tabell för relationerna användare till affiliates, som i följande exempel:

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;

Sortera sedan users Tabellen efter antalet affiliates kommer att se ut ungefär så här:

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;

Fördelarna är många, men viktigast av allt gör det frågor som ovan enkla att skriva och flexibla nog att arbeta med valfritt antal affiliates (och inte begränsat av antalet kolumner du tilldelade).



  1. En bra referens för Oracle PL/SQL

  2. Indexerar SQL Server nollvärden i ett icke-klustrad icke-unikt index?

  3. Oracle överför textvärdesrader till kolumner

  4. Kan du göra en For Every Row-loop med MySQL?