sql >> Base de Datos >  >> RDS >> Mysql

Consulta SQL para contar la cantidad de veces que ciertos valores ocurren en varias filas

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