sql >> Database teknologi >  >> RDS >> Mysql

SQL-forespørgsel for at tælle antallet af gange, at visse værdier forekommer i flere rækker

Ja. det du har burde virke. (Du bliver nødt til at tilføje et alias på den afledte tabel, den fejlmeddelelse, du får, bør være selvforklarende. Let at rette, blot tilføje et mellemrum og bogstavet c (eller hvilket navn du ønsker) i slutningen af ​​din forespørgsel.

Der er en advarsel vedrørende potentialet for duplikat (VoterID, ElectionID) tupler.

Hvis du har en unik begrænsning på (VoterID, ElectionID), så vil din forespørgsel fungere fint.

Hvis du ikke har en unik begrænsning (som ikke tillader duplikat (VoterID, ElectionId) ), så er der et potentiale for, at en vælger med to (2) rækker til valg-ID 1 og ingen rækker til valg-ID 2... kan medtages i optællingen. Og en vælger, der har stemt to gange i Valg-ID 1 og kun én gang i Valg-ID 2, vil den vælger blive udelukket fra optællingen.

At inkludere DISTINCT-søgeordet i en COUNT ville løse det problem, f.eks.

HAVING COUNT(DISTINCT ElectionID) = 2

Jeg ville skrive forespørgslen anderledes, men det du har, vil virke.

For at få optællingen af ​​VoterID, der deltog i både ElectionID 1 og ElectionID2, for forbedret ydeevne, ville jeg undgå at bruge en inline-visning (MySQL kalder det en afledt tabel). Jeg ville have forespørgslen til at bruge en JOIN-operation i stedet for. Noget som dette:

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

Hvis du er garanteret, at (voterID, ElectionID) er unik, så kunne valget være enklere:

SELECT COUNT(1) AS NumVoters
  FROM elections e1
  JOIN elections e2
    ON e2.voterID = e1.voterID
 WHERE e1.electionID = 1
   AND e2.electionID = 2


  1. Hvad er den nemmeste måde at rydde en database fra CLI med manage.py i Django?

  2. Enhver grund til GROUP BY-klausul uden aggregeringsfunktion?

  3. Sådan aktiveres/deaktiveres CHECK-begrænsninger i SQLite

  4. Træk uger fra en dato i PostgreSQL