Portál AbcLinuxu, 27. listopadu 2025 14:04
tabulka, v níž jsou pro mne podstatná pole photoid, tedy identifikátor fotografie a pole rating, které může nabývat hodnoty z množiny {-1;0;1}
Do tabulky se ukládají hlasy z ankety - co hlas, to další záznam v dané tabulce.
No a já bych rád dostal na výstupu tabulku, kde by (v jednodušším případě) byly sloupce
photoid | kolikrát-fotka-dostala-nulu | celkový-počet-hlasů-pro-danou-fotkuS výstupem, kde dostanu jen nulové hlasy (či celkový počet hlasů pro každou fotku) nemám problém:
SELECT COUNT(*) AS pocetnul, photoid FROM tabulka WHERE rating=0 GROUP BY photoidJak do toho ale zamíchat seskupený součet při další podmínce, to nemám páru. No a pokud by to bylo možné, ještě více bych ocenil i další sloupce v rámci toho jednoho výstupu, a to počet záporných hlasů a počet kladných hlasů
Řešení dotazu:
SELECT photoid,
sum(if(rating=-1,1,0)) AS minus,
sum(if(rating=0,1,0)) AS zero,
sum(if(rating=1,1,0)) AS plus,
sum(rating) AS celkem
FROM tabulka GROUP BY photoid;
SELECT photoid, sum(rating=-1) AS minus, sum(rating=0) AS zero, sum(rating=1) AS plus, count(rating) AS celkem FROM tabulka GROUP BY photoid;u celkem musí být count a ne sum, protože pro 3 hodnocení -1,0,1 by sum vrátil 0, count vrátí 3.
sum(rating). Pokud podle počtu hodnocení (logické mi to nepřipadá, ale budiž), použiji count(rating). Záleží na zadání.
Ahoj
Asi neco jako
select TC.photoid, TC.pocetcelkem, T_1.pocetminusjedna, T0.pocetnula, T1.pocetjedna
from
( select photoid, count(*) as pocetcelkem
from tabulka
group by photoid
) TC
left outer join
( select photoid, count(*) as pocetminusjedna
from tabulka
where rating=-1
group by photoid
) T_1 on T_1.photoid = TC.photoid
left outer join
( select photoid, count(*) as pocetnula
from tabulka
where rating=0
group by photoid
) T0 on T0.photoid = TC.photoid
left outer join
( select photoid, count(*) as pocetjedna
from tabulka
where rating=1
group by photoid
) T1 on T1.photoid = TC.photoid
Akorat jsem to mozna spojil "opacne" (a mely by tam byt right outer join)
Dejv
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.