Autor Zpráva
MartinkaK
Profil *
Řeším tady takový zapeklitý případ s výpisem počtů dětí ve třídách s tím, že výpis potřebuji provést od největšího počtů dětí ve třídě.

Mám dvě tabulky: tridy a deti

TRIDY obsahují řádky: id, id_deti, nazev
DETI obsahují řádky: id, jmeno, prijmeni

Čekám, že pro Vás bude vytvoření mySQL jednodušší než pro mně, protože já si vůbec s takovým dotazem neromumím. Za výpomoc budu hrozně moc vděčná.
Martina Klokočná.
juriad
Profil
Jak vypadá sloupec id_deti? To schéma je podezřelé.
Alphard
Profil
V současném stavu je předpokládám pro jednu třídu několik záznamů v tabulce tridy. Byť tento dotaz jde napsat, není to dobře navržené.
U dětí by mělo být id třídy, pokud může být 1 dítě pouze v jedné třídě (relace 1:M). Nebo je třeba vytvořit třetí spojovací tabulku, pokud může být dítě ve ve více třídách (relace M:N).

Dotaz by pak vypadal

select t.*, count(*) pocet
 from tridy t 
 left join deti d on t.id =d .id_tridy
 group by t.id
 order by pocet desc
MartinkaK
Profil *
Hmm dotaz na dvě tabulky ani myslím nebudou potřeba. Řekněme, že budu chtít získat počty dětí podle id_tridy s výpisem od největšího počtu, kde tabulka DETI má id, jmeno, prijmeni, id_tridy. Jak potom bude vypadat mySQL dotaz?
lionel messi
Profil
Skúste:
SELECT d.*, count(id_tridy) AS pocet
FROM deti d
GROUP BY d.id_tridy
ORDER BY pocet desc
juriad
Profil
lionel messi:
Výpis informací o náhodném dítěti z každé třídy a počet spolužáků?

MartinkaK:
Ten dotaz už Alphard uvedl v [#3].
MartinkaK
Profil *
Ano, ale Alphard tam zohlednil dvě tabulky, přičemž jsem radši tabulku upravila a stačí mě výpis pouze na základě jedné tabulky:
DETI: id, jmeno, prijmeni, id_tridy

Dle mého úsudku by mohl dotaz znět něco jako SELECT id_tridy, count(id) as pocet FROM deti WHERE id_tridy = id_tridy ORDER BY pocet, ale to bude asi dost velká hloupost :)


lionel messi
Podle onoho mySQL dotazu se provedl výpis a největší počet má třída č.12, kde to vypíše 25 dětí.

Když ale provedu zpětně test pro výpis těchto dětí z této třídy, tak to vypíše pouze 4 děti.
SELECT count(id) FROM `deti` WHERE `id_tridy` = '12'

Někde bude chybka.
juriad
Profil
MartinkaK:
Když nahradíš WHERE id_tridy = id_tridy za GROUP BY id_tridy, tak by ti ten dotaz měl fungovat. Group by říká, že chceš provádět COUNT pro každou id_třídu zvlášť. A budeš řadit DESC.
MartinkaK
Profil *
SELECT id_tridy, count(id) as pocet FROM deti GROUP BY id_tridy ORDER BY pocet

Mám poslední dotaz. Potřebovala bych do dotazu ještě vložit další tabulku.

Nyní to vypisuje počet žáků ve třídě a já bych potřebovala tento počet žáků zohlednit s největší docházkou, tj. pocet_hodin >= "50".
DOCHAZKA: id, id_deti, pocet_hodin

Hrozně moc děkuji. Dost mně to pomůže.
Alphard
Profil
SELECT d.id_tridy, count(*) as pocet 
 FROM deti d
 LEFT JOIN dochazka z on d.id = z.id_deti 
 WHERE z.pocet_hodin > 50 
 GROUP BY id_tridy 
 ORDER BY pocet
MartinkaK
Profil *
Vypisuje, ale počet žáků je vždy jedna a to i přesto, když měním WHERE z.pocet_hodin > 50 z 50 třeba na 1. Pořád je počet jedna.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: