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

Hvordan kan jeg tælle antallet af indlæg, der har enten nul eller positiv stemmescore?

Den enkleste måde at ekskludere indlæg, hvis samlede stemmer er mindre end nul, er sådan her:

SELECT count(1)
FROM qanda question
JOIN qanda answer ON question.Id = answer.related
WHERE answer.related IS NOT NULL
AND answer.user_id = 2
AND question.free IS NULL
AND question.id not in (
  select post_id
  from votes
  group by post_id
  having sum(value) < 0)

Nøgledelen her er having sum(value) < 0 som vælger indlæg med netto negative stemmer.

Fra kommentarer...

For at finde brugere, der har for mange "dårlige" svar, bør du nok returnere, hvor mange "gode" svar de har lavet, og beslutte, om de samlet set er en "dårlig" bruger. For eksempel er en bruger, der har 5 svar, der alle er dårlige, meget anderledes end en bruger med 1000 svar, hvoraf kun 5 er dårlige, selvom de begge har 5 dårlige svar.

Prøv dette:

select
    sum(score < 0) bad,
    count(*) total,
    sum(score < 0) / sum(.01) percent_bad
from (
    SELECT coalesce(sum(value), 0) score
    FROM qanda question
    JOIN qanda answer ON question.Id = answer.related
    LEFT JOIN votes ON votes.post_id = answer.id
    WHERE answer.related IS NOT NULL
    AND answer.user_id = 2
    AND question.free IS NULL
    AND answer.timestamp > subdate(now(), 365)
    GROUP BY answer.id
) scores

Et par noter om noget SQL Kung Fu derinde:

  • i MySQL er sand 1 og falsk er 0, så ved at summere en betingelse tæller du, hvor mange gange den er sand. Dette er meget nemmere at kode og lettere at læse end den klodsede SUM(CASE ...) udtryk, der kræves af andre DB'er
  • tæller med SUM(.01) (som jeg kun lige tænkte på BTW) er den korteste måde at få en procentdel på, da det ikke kun forenkler udtrykket, men koncerterer svaret til at flyde, så du automatisk undgår heltal aritmetisk afrunding

Ansvarsfraskrivelse:Koden kompilerer eller virker muligvis ikke, som den blev slået ind på min telefon (men der er en rimelig chance for, at den vil virke)



  1. Kopier data fra Salesforce til SQL Server med Spectral Core

  2. MySQL deaktiveret i Lampp, Xampp på Linux 12.04

  3. For at bruge standard BatchConfigurer må konteksten ikke indeholde mere end én DataSource, fundet 2

  4. PL/SQL:Fejl PLS-00306:forkert antal eller typer af argumenter i kald til udløst for taltabel