Bagaimana cara menghitung dan mengambil nol dan bukan nol pada kolom yang sama di MySQL?
meja saya
---------------------------------------------------
id | name | visited | registDate |
---------------------------------------------------
1 | george | NULL | 2014-04-01 |
---------------------------------------------------
2 | Thomas | NULL | 2014-04-15 |
---------------------------------------------------
3 | Wilfred | 1 | 2014-04-24 |
---------------------------------------------------
4 | paul | 1 | 2014-04-10 |
---------------------------------------------------
5 | elina | NULL | 2014-05-03 |
---------------------------------------------------
6 | angela | NULL | 2014-04-13 |
---------------------------------------------------
7 | elina | 1 | 2014-05-18 |
---------------------------------------------------
Hasil yang diharapkan
month register visited not visited
---------------------------------------------
05-2014 2 1 1
---------------------------------------------
04-2014 5 2 3
---------------------------------------------
count(visited)
. count (<column>) hanya akan dihitung bukan null. Jika Anda menambahkan level lain dari nesting count_not_visited dapat ditentukan sebagaicount_registered - count_visited
Untuk menghitung semua nilai bukan nol untuk sebuah kolom, katakanlah
col1
, Anda hanya dapat menggunakancount(col1) as cnt_col1
. Tetapi, agar lebih jelas, Anda dapat menggunakansum()
fungsi danIS NOT NULL
operator, menjadisum(col1 IS NOT NULL)
. Itu karenaIS NOT NULL
operator mengembalikan int: 1 untuk true dan 0 untuk false.Untuk menghitung nilai nol, Anda dapat menggunakan
IS NULL
operator, yang mengembalikan 1 saat nilai nol. Seperti sebelumnya, dengansum()
operator.Mengingat bahwa, untuk mendapatkan pendaftaran, kunjungan dan tidak dikunjungi setiap bulan, inilah yang dapat Anda lakukan:
Perhatikan bahwa Anda bisa menampilkan kolom 'tidak dikunjungi' dengan spasi, hanya dengan mengutip, mengutip ganda atau menggunakan backticks (`).
Pendekatan lain untuk memilih dan mengelompokkan berdasarkan bulan adalah dengan menggabungkan bulan dengan tahun, seperti ini
concat(month(registDate), '-', date(registDate))
. Tapi itu kurang elegan.The
case
Operator diusulkan dalam tanggapan lain adalah hal yang sah, tapi saya pikir itu lebih memadai untuk situasi lainnya. Dan itu lebih bertele-tele.sumber