Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hitung jumlah NULL berturut-turut

Saya tidak yakin apakah ada metode yang lebih rapi, tetapi ini seharusnya berhasil:

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

Kasus uji:

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

Hasil:

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

PERBARUI: Lebih lanjut ke pertanyaan yang diperbarui:

Jika Anda memiliki kolom di tabel Anda yang terlihat seperti affiliate_1 , affiliate_2 , dll, ini jarang merupakan ide yang baik karena Anda akan mencampur data dengan metadata. Secara umum, perbaikan yang disarankan adalah menggunakan tabel dependen lain untuk hubungan pengguna-ke-afiliasi, seperti dalam contoh berikut:

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;

Kemudian urutkan users tabel dengan jumlah afiliasi akan terlihat seperti ini:

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;

Keuntungannya banyak, tetapi yang terpenting adalah membuat kueri seperti di atas mudah ditulis, dan cukup fleksibel untuk bekerja dengan sejumlah afiliasi (tidak dibatasi oleh jumlah kolom yang Anda alokasikan).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengelompokan berdasarkan tanggal, kembalikan baris meskipun tidak ada catatan yang ditemukan

  2. Gabungkan dan Urutkan dua Koleksi Fasih?

  3. Bagaimana saya bisa membuat cadangan tambahan dari database mysql

  4. MySQL - Prosedur tersimpan dengan beberapa set hasil

  5. kesalahan saat menginstal caldecott