Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL заявка за преброяване на броя пъти, когато определени стойности се появяват в множество редове

да. това, което имате, трябва да работи. (Ще трябва да добавите псевдоним към получената таблица, съобщението за грешка, което получавате, трябва да е разбираемо. Лесно за поправяне, просто добавете интервал и буквата c (или каквото име искате) в края на вашата заявка.

Има едно предупреждение относно възможността за дублиране на (VoterID, ElectionID) кортежи.

Ако имате уникално ограничение за (VoterID, ElectionID), тогава вашата заявка ще работи добре.

Ако нямате уникално ограничение (което не позволява дублиране на (VoterID, ElectionId) ), тогава има потенциал за избирател с два (2) реда за ElectionID 1 и без редове за ElectionID 2... този гласоподавател да бъде включен в преброяването. И гласоподавател, който е гласувал два пъти в ElectionID 1 и само веднъж в ElectionID 2, този гласоподавател ще бъде изключен от преброяването.

Включването на ключовата дума DISTINCT в COUNT ще реши този проблем, напр.

HAVING COUNT(DISTINCT ElectionID) = 2

Бих написал заявката по различен начин, но това, което имате, ще свърши работа.

За да получа броя на VoterID, които са участвали както в ElectionID 1, така и в ElectionID2, за подобрена производителност, бих избягвал да използвам вграден изглед (MySQL го нарича извлечена таблица). Бих искал заявката да използва операция JOIN вместо това. Нещо като това:

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

Ако ви е гарантирано, че (voterID, ElectionID) е уникален, тогава изборът може да бъде по-прост:

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. $filter не работи в JPA/Olingo 2.0.11 с MySQL

  2. Принуди потребителите да имат най-новата версия на приложението за Android

  3. MySQL - Как да вмъкнете в таблица, която има връзка много към много

  4. Как да получите остатък с помощта на MOD() в PostgreSQL, MS SQL Server и MySQL

  5. Как мога да видя конкретната стойност на sql_mode?