Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Policz liczbę NULL z rzędu

Nie jestem pewien, czy istnieją lepsze metody, ale to powinno działać:

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

Przypadek testowy:

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

Wynik:

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

AKTUALIZACJA: W nawiązaniu do zaktualizowanego pytania:

Jeśli masz w tabeli kolumny, które wyglądają jak affiliate_1 , affiliate_2 itp., rzadko jest to dobry pomysł, ponieważ mieszanie danych z metadanymi. Ogólnie zalecaną poprawką jest użycie innej tabeli zależnej dla relacji użytkownicy-podmioty stowarzyszone, jak w poniższym przykładzie:

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;

Następnie sortuję users tabela według liczby oddziałów będzie wyglądać mniej więcej tak:

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;

Zalet jest wiele, ale co najważniejsze, sprawia, że ​​zapytania takie jak powyższe są łatwe do napisania i wystarczająco elastyczne, aby współpracować z dowolną liczbą podmiotów stowarzyszonych (nieograniczonych liczbą przydzielonych kolumn).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szerokie pole varchar powoduje błąd Żądana konwersja nie jest obsługiwana przy użyciu openquery z połączonym serwerem MySQL

  2. 193:%1 nie jest poprawnym błędem aplikacji Win32 z nową aplikacją Rails

  3. Flask-SQLAlchemy — kiedy tworzone i niszczone są tabele/bazy danych?

  4. Błąd usuwania wielu wierszy

  5. Różnica między tymi dwoma podejściami do łączenia tabel?