Sí. lo que tienes debería funcionar. (Deberá agregar un alias en la tabla derivada, el mensaje de error que recibe debe explicarse por sí mismo. Fácil de solucionar, solo agregue un espacio y la letra c (o el nombre que desee) al final de su consulta.
Hay una advertencia con respecto a la posibilidad de duplicar (VoterID, ElectionID)
tuplas.
Si tiene una restricción única en (VoterID, ElectionID), entonces su consulta funcionará bien.
Si no tiene una restricción única (que no permite duplicar (VoterID, ElectionId)
), entonces existe la posibilidad de que un votante con dos (2) filas para Elección ID 1 y ninguna fila para Elección ID 2... para que ese votante se incluya en el conteo. Y un votante que votó dos veces en Elección ID 1 y solo una vez en Elección ID 2, ese votante será excluido del conteo.
Incluir la palabra clave DISTINCT dentro de COUNT solucionaría ese problema, por ejemplo,
HAVING COUNT(DISTINCT ElectionID) = 2
Escribiría la consulta de manera diferente, pero lo que tienes funcionará.
Para obtener el recuento de VoterID que participó tanto en ElectionID 1 como en ElectionID2, para mejorar el rendimiento, evitaría usar una vista en línea (MySQL lo llama tabla derivada). En su lugar, haría que la consulta usara una operación JOIN. Algo como esto:
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
Si se le garantiza que (voterID, ElectionID)
es único, entonces la selección podría ser más simple:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2