Portál AbcLinuxu, 12. května 2025 19:33
nazov datum hodnota aaas 2010-03-10 a aaad 2010-03-10 n aaae 2010-03-10 a aaab 2010-04-10 a aaaq 2010-04-10 n aaaw 2010-05-10 asnažím dostať nasledovné: zistiť pre každý deň počet "a" a počet "n" teda výsledok by mal byť podľa tohoto vzoru takýto:
datum hodnota_a hodnota_n 2010-03-10 2 1 2010-04-10 1 1 2010-03-10 0 1viem spraviť ale iba cez dva selecty
SELECT datum, count(*) FROM tabulka WHERE hodnota='a' GROUP BY datum ORDER BY datum DESC;len tým dostanem iba počet "a" a neviem ako to vložiť to jednej query/výsledku databáza je MySQL. ďakujem za akýkoľvek nápad
SELECT datum, sum(CASE WHEN hodnota = 'a' THEN 1 ELSE 0 END), sum(CASE WHEN hodnota = 'n' THEN 1 ELSE 0 END) FROM ... GROUP BY dataum;
SELECT datum, COUNT(NULLIF(hodnota, 'n')) AS hodnota_a, COUNT(NULLIF(hodnota, 'a')) AS hodnota_n, FROM tabulka GROUP BY datum;V pripade vetsiho mnozstvi hodnot muzes ten NULLIF pro opacnou hodnotu nahradit CASE vyrazem (pak by byla kazda polozka neco jako: COUNT(CASE WHEN hodnota = 'a' THEN 1 ELSE NULL END) AS hodnota_a).
SELECT datum, count(*) as spolu, COUNT(if(hodnota='a',1,null)) AS pocet_hodnota_a, COUNT(if(hodnota='n',1,null)) AS pocet_hodnota_n, CONCAT(round((COUNT(if(hodnota_a='a',1,null))/COUNT(*))*100,0), ' %') as uspesnost FROM tabulka GROUP BY datum ORDER BY datum DESC;bude jednať o väčšiu tabuľku a teraz neviem ktorá s týchto troch možností je najrýchlejšia? ešte v poslednom stĺpci som spravil percentuálnu úslešnosť. teda sú 4 stĺpce:
- dátum - spolu - pocet_hodnota_a (úspech) - pocet_hodnota_n (neúspech) - uspesnostNedá sa namiesto COUNT(if(hodnota_a='a',1,null)) použiť niečo jednoduchšie teda napr iba pocet_hodnota_a ? či to sa dá použit už iba v order klauzele? ďakujem pekne
SELECT DISTINCT datum, (SELECT count(*) FROM tab WHERE datum = o.datum AND hodnota = 'a'), (SELECT count(*) FROM tab WHERE datum = o.datum AND hodnota = 'n') FROM tab o;Tento dotaz bude dělat totéž, nicméně může být 1000x pomalejší.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.