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

Bagaimana cara menulis kueri pemilihan sederhana alih-alih menggunakan tampilan?

Yang Anda butuhkan adalah HAVING klausa untuk menemukan COUNT(*) = 2 setelah mengelompokkan berdasarkan tanggal dan spesialisasi. Bahkan, tidak perlu bersarang. (Saya juga telah mengganti gabungan implisit Anda dengan FROM yang dipisahkan koma klausa dengan JOIN yang eksplisit , yang merupakan sintaks modern yang lebih disukai).

SELECT 
  v.pid,
  d.speciality,
  v.date,
  COUNT(COUNT DISTINCT d.did) AS numvisits
FROM 
  visits v
  JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
/* Note - depending on your RDBMS, you may
   be able to use the count alias as
HAVING numvisits = 2 
   MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */

SELECT daftar di sini dan GROUP BY harus menghasilkan id pasien, spesialisasi, tanggal, dan jumlah kunjungan untuk kombinasi agregat dari 3 kolom tersebut. HAVING klausa kemudian membatasinya hanya untuk mereka yang memiliki 2 kunjungan untuk grup.

Untuk menarik hanya pasien dari ini, bungkus dalam subquery:

SELECT Patients.* 
FROM Patients JOIN (
  SELECT 
    v.pid,
    d.speciality,
    v.date,
    COUNT(COUNT DISTINCT d.did) AS numvisits
  FROM 
    visits v
    JOIN Doctors d ON v.did = d.did
  GROUP BY v.pid, d.speciality, v.date
  HAVING COUNT(COUNT DISTINCT d.did) = 2
) subq ON Patients.pid = subq.pid


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batch Pernyataan yang disiapkan Java MySQL

  2. Mengapa string SQL saya menyebabkan Pesan Kesalahan:Kesalahan parse:kesalahan sintaks di PHP?

  3. Apakah ide yang baik untuk menggunakan Hibernate untuk mewakili hubungan tabel?

  4. Memasukkan item ke dalam bootstrap-dropdown dari SQL Table

  5. MySQL, Dapatkan peringkat pengguna