Autor | Zpráva | ||
---|---|---|---|
MartinkaK Profil * |
#1 · Zasláno: 15. 11. 2014, 11:53:08
Ř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 |
#2 · Zasláno: 15. 11. 2014, 11:59:13
Jak vypadá sloupec id_deti? To schéma je podezřelé.
|
||
Alphard Profil |
#3 · Zasláno: 15. 11. 2014, 12:03:07
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 * |
#4 · Zasláno: 15. 11. 2014, 12:33:48
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 |
#5 · Zasláno: 15. 11. 2014, 12:57:40
Skúste:
SELECT d.*, count(id_tridy) AS pocet FROM deti d GROUP BY d.id_tridy ORDER BY pocet desc |
||
juriad Profil |
#6 · Zasláno: 15. 11. 2014, 13:00:37
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 * |
#7 · Zasláno: 15. 11. 2014, 13:08:58
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 * |
#9 · Zasláno: 15. 11. 2014, 15:25:34
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 |
#10 · Zasláno: 15. 11. 2014, 15:50:26
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 * |
#11 · Zasláno: 15. 11. 2014, 16:10:24
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.
|
||
Časová prodleva: 10 let
|
0