sql >> Databasteknik >  >> RDS >> Mysql

SQL-fråga för att räkna antalet gånger vissa värden förekommer i flera rader

Ja. det du har borde fungera. (Du måste lägga till ett alias på den härledda tabellen, felmeddelandet du får bör vara självförklarande. Lätt att fixa, lägg bara till ett mellanslag och bokstaven c (eller vilket namn du vill) i slutet av din fråga.

Det finns en varning angående risken för dubbletter av (VoterID, ElectionID) tupler.

Om du har en unik begränsning på (VoterID, ElectionID), kommer din fråga att fungera bra.

Om du inte har en unik begränsning (som inte tillåter dubbletter av (VoterID, ElectionId) ), då finns det en potential för en väljare med två (2) rader för val-ID 1 och inga rader för val-ID 2... för den väljaren att inkluderas i räkningen. Och en väljare som röstade två gånger i val-ID 1 och bara en gång i val-ID 2, kommer den väljaren att uteslutas från räkningen.

Att inkludera nyckelordet DISTINCT i en COUNT skulle lösa det problemet, t.ex.

HAVING COUNT(DISTINCT ElectionID) = 2

Jag skulle skriva frågan annorlunda, men det du har kommer att fungera.

För att få räkningen av VoterID som deltog i både ElectionID 1 och ElectionID2, för förbättrad prestanda, skulle jag undvika att använda en inline-vy (MySQL kallar det en härledd tabell). Jag skulle låta frågan använda en JOIN-operation istället. Något så här:

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

Om du är garanterad att (voterID, ElectionID) är unik, då kan valet vara enklare:

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. Långsamhet hittas när bas 64-bild väljer och kodar från databasen

  2. Binära data i MySQL

  3. Oracles unika begränsning och unika index

  4. Ändra utdataformat för MySQL kommandoradsresultat till CSV