sql >> Database >  >> RDS >> Mysql

Tel het aantal NULL's op een rij

Ik weet niet zeker of er nettere methoden zijn, maar dit zou moeten werken:

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

Testcase:

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

Resultaat:

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

UPDATE: Naar aanleiding van de bijgewerkte vraag:

Als u kolommen in uw tabel heeft die eruitzien als affiliate_1 , affiliate_2 , enz., is dit zelden een goed idee, omdat u gegevens met de metagegevens zou vermengen. Over het algemeen is een aanbevolen oplossing om een ​​andere afhankelijke tabel te gebruiken voor de relaties tussen gebruikers en aangeslotenen, zoals in het volgende voorbeeld:

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;

Sorteer vervolgens de users tabel met het aantal aangeslotenen ziet er ongeveer zo uit:

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;

De voordelen zijn legio, maar het belangrijkste is dat zoekopdrachten zoals het bovenstaande gemakkelijk te schrijven zijn en flexibel genoeg om met een willekeurig aantal aangesloten bedrijven te werken (niet beperkt door het aantal kolommen dat u hebt toegewezen).



  1. Kan ik blindelings alle mysql_-functies vervangen door mysqli_?

  2. Formulier om gegevens uit de MySQL-database te verwijderen met behulp van PHP

  3. SQLAlchemy - telstatus is waar

  4. Dynamische labels genereren en de kolomnaam en waarde als tekst gebruiken