Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie SQL do zliczania, ile razy określone wartości występują w wielu wierszach

Tak. to, co masz, powinno działać. (Będziesz musiał dodać alias do tabeli pochodnej, komunikat o błędzie, który otrzymasz, powinien być oczywisty. Łatwe do naprawienia, po prostu dodaj spację i literę c (lub inną nazwę) na końcu zapytania.

Jest jedno zastrzeżenie dotyczące możliwości zduplikowania (voterID, ElectionID) krotki.

Jeśli masz unikalne ograniczenie (VoterID, ElectionID), twoje zapytanie będzie działać poprawnie.

Jeśli nie masz unikalnego ograniczenia (co uniemożliwia duplikowanie (VoterID, ElectionId) ). A wyborca, który zagłosował dwa razy w ElectionID 1 i tylko raz w ElectionID 2, zostanie wykluczony z liczenia.

Dołączenie słowa kluczowego DISTINCT do COUNT rozwiąże ten problem, np.

HAVING COUNT(DISTINCT ElectionID) = 2

Zapytałbym inaczej, ale to, co masz, będzie działać.

Aby uzyskać liczbę VoterID, który uczestniczył zarówno w ElectionID 1, jak i ElectionID2, w celu poprawy wydajności, unikałbym używania widoku wbudowanego (MySQL nazywa go tabelą pochodną). Miałbym zapytanie użyć zamiast tego operacji JOIN. Coś takiego:

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

Jeśli masz gwarancję, że (voterID, ElectionID) jest unikalny, wybór może być prostszy:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. laravel wyszukuje wiele słów oddzielonych spacją

  2. IDENTYFIKOWANE PRZEZ „hasło” w MySQL

  3. Połączenie Java - MySQL:Pobieranie klucza publicznego jest niedozwolone

  4. Użyte instrukcje SELECT mają różną liczbę kolumn

  5. MySQL:Jak programowo określić relacje klucza obcego?