Mysql
 sql >> база данни >  >> RDS >> Mysql

Пребройте броя на NULL в един ред

Не съм сигурен дали има по-чисти методи, но това трябва да работи:

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

Тестов случай:

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

Резултат:

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

АКТУАЛИЗАЦИЯ: В допълнение към актуализирания въпрос:

Ако имате колони в таблицата си, които изглеждат като affiliate_1 , affiliate_2 и т.н., това рядко е добра идея, тъй като бихте смесили данни с метаданни. Като цяло препоръчителната корекция е да се използва друга зависима таблица за връзките между потребители и партньори, както в следния пример:

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;

След това сортирайте users таблицата по броя на филиалите ще изглежда така:

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;

Предимствата са много, но най-важното е, че прави заявки като горните лесни за писане и достатъчно гъвкави, за да работят с произволен брой партньори (без ограничение от броя колони, които сте разпределили).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL заявка за присъединяване с помощта на like?

  2. JDBC Изтриване и вмъкване с помощта на пакет

  3. Достъп до mysql база данни от външен хост/ip? (т.е.:mysql работна маса)

  4. Когато ПОРЪЧАМ ПО изчислена колона, заявката се забавя значително - може ли това да се ускори?

  5. Да съкратите всички таблици в MySQL база данни с една команда?