Portál AbcLinuxu, 10. května 2025 12:12
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.photoidAkorat 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.