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

Jak mohu spočítat počet příspěvků, které mají nulové nebo kladné skóre?

Nejjednodušší způsob, jak vyloučit příspěvky, jejichž celkový počet hlasů je menší než nula, je tento:

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)

Klíčovou částí je zde having sum(value) < 0 které vybírají příspěvky s čistými zápornými hlasy.

Z komentářů...

Chcete-li najít uživatele, kteří mají příliš mnoho „špatných“ odpovědí, pravděpodobně byste měli vrátit, kolik „dobrých“ odpovědí učinili, a rozhodnout, zda jsou celkově „špatným“ uživatelem. Například uživatel, který má 5 odpovědí, které jsou všechny špatné, se velmi liší od uživatele s 1000 odpověďmi, z nichž pouze 5 je špatných, i když oba mají 5 špatných odpovědí.

Zkuste toto:

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

Pár poznámek k nějakému SQL Kung Fu tam:

  • v MySQL je true 1 a false je 0, takže sečtením podmínky spočítáte, kolikrát je pravdivá. Toto je mnohem jednodušší kódovat a snáze číst než neohrabané SUM(CASE ...) výrazy potřebné pro jiné DB
  • počítání o SUM(.01) (což mě mimochodem jen napadlo) je nejkratší způsob, jak získat procenta, protože nejen zjednodušuje výraz, ale uvádí odpověď do plovoucí podoby, takže se automaticky vyhnete aritmetickému zaokrouhlování celých čísel

Zřeknutí se odpovědnosti:Kód se nemusí zkompilovat nebo fungovat tak, jak byl načten na mém telefonu (ale existuje rozumná šance, že bude fungovat)



  1. Laravel 5:spouštějte migrace v prostředí serveru, nikoli v místním prostředí

  2. Chyba MySql:Nelze aktualizovat tabulku v uložené funkci/spouštěči, protože ji již používá příkaz, který tuto uloženou funkci/spouštěč vyvolal

  3. Docker mysql se nemůže připojit ke kontejneru

  4. Jak nainstalovat SQLcl na Mac