SQLtutor - chyby ZS 2007: Porovnání verzí
m →206 |
|||
Řádek 241: | Řádek 241: | ||
<span style="color:blue">výborně!</span> tuto anketu (revize bodového hodocení) musíme nějak sjednotit. Připoměňte mi to na přednášce, uděláme si na toto téma příklad. Body pak budeme počítat zvlášť. Nepříjdete o ně. | <span style="color:blue">výborně!</span> tuto anketu (revize bodového hodocení) musíme nějak sjednotit. Připoměňte mi to na přednášce, uděláme si na toto téma příklad. Body pak budeme počítat zvlášť. Nepříjdete o ně. | ||
== Jana Hrnčířová == | |||
=== 804 === | |||
během procvičování SQL jsem přišla na nejasnost u příkladu č. 804. Na mojí odpověď se napsala následující hláška: ERROR: relation "limity_spa" does not exist. Přitom ani v zadaných tabulkách, ani v mé odpovědi se žádný takový parametr nevyskytuje. Když jsem použila odpověď z nápovědy, objevila se stejná hláška. Odpověď z nápovědy používá limity_spa jako název tabulky, ale tabulka se jmenuje limity_cm. Po úprave odpovědi z nápovědi též vyskočí stejná hláška. |
Verze z 24. 10. 2007, 20:05
Eliška Svobodová
101
procházím si testy na Vašem SQL tutorovi. Moc se mi líbí tento způsob učení jazyka SQL přímo na příkladech s možností zobrazení správného řešení.
Dnes na cvičení jste říkal, že pokud najdeme chybu, tak se máme ozvat. Nevím, jestli se moje poznámka dá charakterizovat jako upozornění na chybu. Spíše chci poukázat na nejasné položení otázky č. 101. Vypište seznam všech zaměstnanců. Mám k dispozici tato data.
Tabulka Sloupce
pracoviste kod, popis zamestnanci id, jmeno, prijmeni, pracoviste_kod, vek mzdy id, vlozeno, zamestnanec_id, castka
Za seznam zaměstnanců bych spíše než výpis celé tabulky "zamestnanci" (id, jmeno, prijimeni, pracoviste_kod, vek) považovala seznam jmen a přijímení zaměstnanců (pouze sloupce jmeno a prijimeni). Proto jsem dotaz napsala takto: SELECT jmeno, prijmeni FROM zamestnanci;
Při vyhodnocení SQL mi tutor ohlásil chybnou odpověď. Myslím ale, že ze zadání není zcela jasné, zda má být výsledkem jmenný seznam nebo jmenný seznam doplněný o id, kód pracoviště a věk.
Nerada bych, aby mne taková nejasnost potkala při testování v závěru semestru :-)
Děkuji a ještě jednou chválím možnost procvičování dotazů v SQL tutorovi.
ano : 1
206
našla jsem ještě další nesrovnalost u otázky č. 206. Zde je jasně daná otázka: Jaké je id filmu 'Dům u jezera'? K dispozici jsou data:
Tabulka Sloupce
filmy id, rok, titul umelci id, jmeno obsazeni film_id, umelec_id, poradi rezie film_id, umelec_id
Odpověď na tuto otázku by měl být pouze jeden sloupec obsahující id. Napsala jsem proto příkaz:
SELECT id FROM filmy WHERE titul='Dům u jezera'
Dle Vašeho správného řešení však má odpověď obsahovat dva sloupce: id a název filmu. A to je podle mě chyba, neboť dotaz zní jasně a týká se pouze id.
Nejsem žádný expert, proto se nezlobte, že opět píši. Jen mě baví procházet si úlohy v SQL tutorovi a zkoušet je řešit.
ano : 1
510
drobné nedorozumnění jsem našla u otázky č. 510: Které evropské země (Europe) mají HPD na hlavu vyšší než Velká Británie (United Kingdom). Myslím, že zde by jako správná odpověď měl stačit 1 sloupec tvořený seznamem evropských států. Zde jsou za správnou odpověď požadovány sloupce dva a to stat a region. Otázka zní, které Evropské země, proto myslím, že stačí, když se tato podmínka objeví pouze v dotazu SQL (........WHERE region LIKE '%Europe%'...........) a nikoli jako další sloupec na výstupu. Popřípadě by bylo dobré uznat jako správnou odpověď také samostatný sloupec se státy splňujícími podmínku (Evropa, HDP na hlavu).
412
Podobným případem je v otázka* č. 412: *Které země mají v seznamu světového dědictví UNESCO zapsáno deset a více památek?
SELECT zeme FROM unesco GROUP BY zeme HAVING COUNT(pamatka) >= 10;
Tento příkaz vypíše seznam zemí, ale bez počtu památek, což je považováno za chybnou odpověď, ale v otázce není napsáno, že je třeba zobrazit i počet.
Pavel Seeman
Zkoušel jsem si příklady v SQL tutoru a objevil jsem dvě drobné chybky u příkladů 205 a 217. O co jde?
205
U 205 je dotaz: Jaké id má Miloš Forman? Z otázky chápu, že mám vypsat jen příslušné id, ale za správnou odpověď není považován zápis:
SELECT id FROM umelci WHERE jmeno = 'Miloš Forman'
Místo toho je správný výpis i se jménem Miloš Forman. Jde o stejný typ chyby jako byl u příkladu 206 (viz. zveřejněné chyby na gamě). A o to samé se jedná i u příkladu 217 (Vypište všechny filmy a herce za rok 2003.), kdy správné řešení opět vyžaduje i sloupec s rokem 2003.
ano: 1
217
ano: 3
600
několik připomínek k SQL tutoru:
V datasetu 600 u tabulky dopravni_letadla bych přejmenoval sloupec spolecnost na vyrobce, aby se název nepletl se sloupcem stejného jména v tabulce letecke_spolecnosti. ( U některé z otázek mi nebylo jasné, jestli se společností myslí výrobce či provozovatel letadel.)
ano i ne : 3 (důvody jsou pro i proti, zatím jsem ponechal v původním stavu)
800
U datasetu 800 chybí u tabulky cleneni v zadání sloupec tok_id. (V zobrazených datech již je.)
ano : 5
704
V příkladu 704 bych změnil otázku na: Jaká je celková rozloha rybníků podle povodí? Uveďte vždy povodí, celkovou rozlohu a počet rybníků v daném povodí. Ze současného dotazu není podle mě jasné, že se má vypsat i sloupec povodí. Jedná se o podobnou chybu jako byla u 205 a 217, ale tentokrát bych spíše upravil zadání než SQL dotaz.
ano : 3
213
zkoušel jsem si opět příklady z SQL tutoru a objevil jsem, že v 213 je úplně špatně SQL dotaz. Otázka zní: Kteří herci hráli alespoň pětkrát v hlavní roli?
Moc jsem si se zadáním nevěděl rady a tak jsem zkusil příkaz:
SELECT jmeno FROM umelci JOIN obsazeni ON id = umelec_id GROUP BY jmeno HAVING COUNT(poradi) >= 5;
o kterém jsem tušil, že vypíše herce, kteří hráli v alespoň pěti filmech, bez rozlišení role. K mému překvapení SQLtutor vyhodnotil odpověď jako správnou. Zdálo se mi to ale podezřelé, že by nebyl žádný herec s pěti a více filmy a třeba jen s jednou hlavní rolí. Podíval jsem se tedy do nápovědy, ale ta mi moc nepomohla - zdála se mi taky chybná. Tato domněnka se mi potvrdila, když jsem si prošel přednášky o subselectech a napsal příkaz:
SELECT jmeno, COUNT(poradi), SUM(poradi) FROM umelci JOIN obsazeni ON id = umelec_id GROUP BY jmeno HAVING jmeno = 'Morgan Freeman';
Z výsledku (počet filmu je 5 a suma pořadí je 9) je jasné, že Morgan Freeman nemohl hrát v alespoň pěti filmech hlavní roli.
Nechtěl jsem Vám poslat jen zprávu o chybě, ale i správný dotaz a tak jsem docela dlouho zkoušel vyřešit příklad přes subselecty, ale nakonec to bylo mnohem jednodušší:
SELECT jmeno FROM umelci JOIN obsazeni ON umelci.id = umelec_id GROUP BY jmeno HAVING (2*COUNT(poradi) - SUM(poradi)) >= 5;
(Atribut pořadí je pouze 1 či 2.)
ano : 8
- ... nicméně se mi Vaše řešení moc nelíbí (je to takový trik s pořadím). Mně tam chyběla jedna podmínka WHERE poradi=1 a nakonec jsem to napsal jako JOIN (podobně jako Vy, ale s explicitní a jasnou podmínkou). Ve sbírce příkladů jsem to opravil, mělo by to být správně i na sqltutorovi.
SELECT jmeno FROM umelci JOIN obsazeni ON id = umelec_id WHERE poradi=1 GROUP BY jmeno HAVING COUNT(poradi) >= 5;
Zuzana Basíková
104
myslím,že lze jednodušší řešení :
select jmeno, prijmeni, zamestnanci.id from zamestnanci where pracoviste_kod='it';
ano : 3 (není to JOIN, ale jednoduchý select, snížil jsem počet bodů a změnil kategorii)
216
Co je v tabulkách jméno režiséra? jako umělce?
odpověď : 3 režiséři mohou být zároveň i herci a naopak. Zařadil jsem je proto všechny do tabulky umelci ... myslím, že je to tak v pořádku, ale mohu se mýlit. Zatím jsem to ponechal jak je.
309
nesrozumitelné zadání, má jen 3 body
názor : 1 Mně se otázka Na kterých tramvajových linkách je čtyřicet a více zastávek? zdá jasná, mohu se ale mýlit, je to příklad na použití agregační funkce COUNT, tři body jsou myslím dostatečné.
518
v SQLtutor se zobrazuje: Jaká je celkový populace ... ? čeština
ano : 3
802
chyba ve spojení tabulek, tok_id není v cleneni. podle mě by mělo být:
select jmeno from toky join stanice on toky.id=stanice.id join cleneni on stanice_id=stanice.id where povodi = 'Berounka';
ano : 5 atribut tok_id jsem neměl uveden v tabulce datasets pro tabulku cleneni. Na totéž upozornil pan Seeman, viz výše.
bodové hodnocení
otázka 310: dala bych alespoň 5 bodů otázka 608: těžká, má jen 3 body otázka 610: těžká, má jen 3 body otázka 613: dala bych alespoň 4 body otázka 624: těžká, alespoň 4 body, není žádný bod otázka 625: těžká, alespoň 4 body, není žádný bod otázka 627: dost těžká, má jen 3 body otázka 808: by měla mít více bodů než 9
výborně! tuto anketu (revize bodového hodocení) musíme nějak sjednotit. Připoměňte mi to na přednášce, uděláme si na toto téma příklad. Body pak budeme počítat zvlášť. Nepříjdete o ně.
Jana Hrnčířová
804
během procvičování SQL jsem přišla na nejasnost u příkladu č. 804. Na mojí odpověď se napsala následující hláška: ERROR: relation "limity_spa" does not exist. Přitom ani v zadaných tabulkách, ani v mé odpovědi se žádný takový parametr nevyskytuje. Když jsem použila odpověď z nápovědy, objevila se stejná hláška. Odpověď z nápovědy používá limity_spa jako název tabulky, ale tabulka se jmenuje limity_cm. Po úprave odpovědi z nápovědi též vyskočí stejná hláška.