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

Bagaimana cara menambahkan beberapa batasan ke kueri?

Saya memahami pertanyaan Anda seperti ini. Anda memiliki 3 pengguna (user_id=1,2,3) login pada periode 01.01.2018-12.01.2018. Dari pengguna tersebut, user_id 1 melakukan 2 pembayaran dengan total 250, user_id 2 melakukan 1 pembayaran sebesar 40, dan user_id 3 melakukan 0 pembayaran sehingga totalnya adalah 0. Jadi ada 2 nilai dalam rentang 0-200 , dan 1 dalam rentang 200 + . Jika itu pemahaman yang benar, kueri ini akan memberi Anda hasil yang diinginkan:

SELECT CASE  
         WHEN amount < 200 THEN '0-200'
         WHEN amount >= 200 THEN '200 +'
       END AS diapason,
       COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
      FROM activity a
      LEFT JOIN payments p ON p.user_id = a.user_id
      WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
      GROUP BY a.user_id) p
GROUP BY diapason;

Keluaran:

diapason    number_of_users
0-200       2
200 +       1

Demo SQLFiddle

Perbarui

Untuk menambahkan baris lain dengan total number_of_users , cukup tambahkan WITH ROLLUP ke GROUP BY klausa:

SELECT CASE  
         WHEN amount < 200 THEN '0-200'
         WHEN amount >= 200 THEN '200 +'
       END AS diapason,
       COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
      FROM activity a
      LEFT JOIN payments p ON p.user_id = a.user_id
      WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
      GROUP BY a.user_id) p
GROUP BY diapason WITH ROLLUP

Keluaran:

diapason    number_of_users
0-200       2
200 +       1
(null)      3

Dalam kerangka kerja aplikasi Anda, Anda dapat menggunakan fakta bahwa diapason nilainya adalah NULL untuk menampilkan sesuatu seperti Total sebagai gantinya.

SQLFiddle yang diperbarui

Anda juga dapat melakukan hal yang sama di MySQL (lihat SQLFiddle ini ) dengan membungkus kueri ini sebagai subkueri dan menggunakan COALESCE pada diapason kolom. Dalam hal ini outputnya adalah:

diapason    number_of_users
0-200       2
200 +       1
Total       3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa MySQL memungkinkan Anda untuk mengelompokkan berdasarkan kolom yang tidak dipilih?

  2. server mysql telah hilang kesalahan saat menginstal migrasi (laravel)

  3. Tidak dapat mencari kueri di tabel MySQL

  4. Pencarian JSON di laravel fasih

  5. Bisakah Anda bergabung dalam subquery dengan Doctrine 2 DQL?