sql >> Databáze >  >> RDS >> Mysql

SQL dotaz pro sčítání, kolikrát se určité hodnoty vyskytují ve více řádcích

Ano. to co máš by mělo fungovat. (Do odvozené tabulky budete muset přidat alias, chybová zpráva, kterou dostanete, by měla být srozumitelná. Snadná oprava, stačí přidat mezeru a písmeno c (nebo jakýkoli název, který chcete) na konec vašeho dotazu.

Existuje jedno upozornění ohledně možného duplicitního (VoterID, ElectionID) n-tice.

Pokud máte jedinečné omezení (VoterID, ElectionID), bude váš dotaz fungovat dobře.

Pokud nemáte jedinečné omezení (které neumožňuje duplikovat (VoterID, ElectionId) ), pak existuje potenciál pro voliče se dvěma (2) řádky pro ElectionID 1 a žádné řádky pro ElectionID 2... pro tohoto voliče, aby byl zahrnut do sčítání. A volič, který hlasoval dvakrát v ElectionID 1 a pouze jednou v ElectionID 2, bude tento volič ze sčítání vyloučen.

Zahrnutí klíčového slova DISTINCT do COUNT by tento problém vyřešilo, např.

HAVING COUNT(DISTINCT ElectionID) = 2

Napsal bych dotaz jinak, ale to, co máte, bude fungovat.

Abych získal počet VoterID, který se účastnil jak ElectionID 1, tak ElectionID2, pro lepší výkon bych se vyhnul použití inline zobrazení (MySQL to nazývá odvozenou tabulkou). Místo toho bych nechal dotaz použít operaci JOIN. Něco jako toto:

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

Pokud máte zaručeno, že (voterID, ElectionID) je jedinečný, pak by výběr mohl být jednodušší:

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. Kdy jsme zvolili DateTime před Timestamp

  2. Jak získat všechny hodnoty ve sloupci pomocí PHP?

  3. Upgradováno na Ubuntu 16.04, nyní jsou přerušeny závislosti MySQL-python

  4. Připojení k mysql pomocí php