Ya. apa yang Anda miliki harus bekerja. (Anda perlu menambahkan alias pada tabel turunan, pesan kesalahan yang Anda dapatkan harus cukup jelas. Mudah diperbaiki, cukup tambahkan spasi dan huruf c (atau nama apa pun yang Anda inginkan) di akhir kueri Anda.
Ada satu peringatan mengenai potensi duplikat (VoterID, ElectionID)
tupel.
Jika Anda memiliki batasan unik pada (VoterID, ElectionID), maka kueri Anda akan berfungsi dengan baik.
Jika Anda tidak memiliki batasan unik (yang melarang duplikat (VoterID, ElectionId)
), maka ada potensi seorang pemilih dengan dua (2) baris untuk ElectionID 1, dan tidak ada baris untuk ElectionID 2... untuk pemilih tersebut untuk diikutsertakan dalam penghitungan. Dan seorang pemilih yang memilih dua kali di ElectionID 1 dan hanya sekali di ElectionID 2, pemilih tersebut akan dikeluarkan dari penghitungan.
Menyertakan kata kunci DISTINCT di dalam COUNT akan memperbaiki masalah itu, mis.
HAVING COUNT(DISTINCT ElectionID) = 2
Saya akan menulis kueri secara berbeda, tetapi apa yang Anda miliki akan berhasil.
Untuk mendapatkan jumlah VoterID yang berpartisipasi dalam ElectionID 1 dan ElectionID2, untuk meningkatkan kinerja, saya akan menghindari penggunaan tampilan sebaris (MySQL menyebutnya tabel turunan). Saya akan meminta kueri menggunakan operasi GABUNG sebagai gantinya. Sesuatu seperti ini:
SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2
Jika Anda dijamin bahwa (voterID, ElectionID)
unik, maka pemilihannya bisa lebih sederhana:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2