• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc w realizacji odcinka MySQL - GROUP BY

Object Storage Arubacloud
+8 głosów
2,064 wizyt
pytanie zadane 15 sierpnia 2020 w Nasze projekty przez Mirosław Zelent Nałogowiec (34,750 p.)

Cześć,

Mam prośbę do osób, które mają chwilę czasu, aby pomóc sprawdzić poprawność sześciu zapytań GROUP BY, których chcę użyć w nadchodzącym odcinku serii MySQL o grupowaniu (nie mam świeżego oka jako autor poleceń). Chodzi o znalezienie ewentualnych błędów lub po prostu powiedzenie: to zapytanie nr X jest OK. Dziękuję za pomoc!

Import baz można pobrać tutaj

Baza z pliku world.sql

1. Ile jest państw na każdym z kontynentów?

SELECT Continent, COUNT(Code) AS IlePanstw FROM country GROUP BY Continent ORDER BY IlePanstw DESC

2. Które języki (oficjalne, urzędowe) są używane przez najwięcej państw europejskich?

SELECT Language, COUNT(CountryCode) AS IlePanstwUzywa FROM countrylanguage, country WHERE IsOfficial="T" AND Continent="Europe" AND country.Code=countrylanguage.CountryCode GROUP BY Language ORDER BY IlePanstwUzywa DESC


3. Podaj dla każdego państwa w Ameryce Południowej łączną liczbę obywateli, mieszkających w dużych miastach, mających co najmniej 100 tysięcy mieszkańców?

SELECT country.Name, SUM(city.Population) AS IluObywateli FROM city, country WHERE Continent="South America" AND city.Population>100000 AND country.Code=city.CountryCode GROUP BY country.Name ORDER BY IluObywateli DESC

 

Baza z pliku ptaki.sql


4. Ile ptaków należących do każdego gatunku zaobserwowali ornitolodzy? Ptaków którego gatunku było najwięcej?

SELECT nazwa_zwyczajowa, SUM(Liczebnosc) AS IlePtakow FROM gatunki, obserwacje WHERE gatunki.ID_gatunku=obserwacje.ID_gatunku GROUP BY nazwa_zwyczajowa ORDER BY IlePtakow DESC


5. Jakich 10 gatunków ptaków było obiektem najczęściej prowadzonych obserwacji przez ornitologów w powiecie gdańskim?

SELECT gatunki.nazwa_zwyczajowa, COUNT(poczatek) AS IleObserwacji FROM gatunki, obserwacje, lokalizacje WHERE gatunki.ID_gatunku=obserwacje.ID_gatunku AND lokalizacje.ID_lokalizacji=obserwacje.ID_lokalizacji AND lokalizacje.powiat="gdanski" GROUP BY gatunki.nazwa_zwyczajowa ORDER BY IleObserwacji DESC LIMIT 10

6. W którym powiecie liczba zaobserwowanych ptaków z gatunku dzieciol, lecz tylko tych, które żerują w lesie,  jest największa, a w którym najmniejsza?

SELECT powiat, SUM(liczebnosc) AS ZerujacychWLesieDzieciolow FROM gatunki, obserwacje, lokalizacje WHERE zachowanie="zeruje" AND nazwa_zwyczajowa LIKE "dzieciol%" AND opis LIKE "%las%" AND gatunki.ID_gatunku=obserwacje.ID_gatunku AND lokalizacje.ID_lokalizacji=obserwacje.ID_lokalizacji  GROUP BY powiat ORDER BY ZerujacychWLesieDzieciolow DESC 

 

1
komentarz 15 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)
Moim zdaniem ten temat zasługuje na przypięcie, ponieważ może pozytywnie wpłynąć na jakość odcinka kursu, od którego to forum powstało.
komentarz 15 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
A dzięki! Ale moje zmagania nie są myślę w żaden sposób ważniejsze od zmagań innego użytkownika tego forum. Pozdrawiam!
komentarz 15 sierpnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Link do baz nie działa, potrzeba uprawnień
1
komentarz 15 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
Oj przepraszam - słowo daję, że kliknąłem żeby każdy mający link mógł pobrać, zanim wyszedłem na trening.... Już naprawione! Dzięki za info i sorki za kłopot z pobraniem
2
komentarz 16 sierpnia 2020 przez JAKUBW Nałogowiec (33,470 p.)

 

Continent, COUNT(Code) AS IlePanstw

Takie pytanie: Czemu mieszane są dwa języki, jest jakiś powód tego? Bo ja słyszałem żeby używać tylko angielskiego a mieszanie języków to zła praktyka.

1
komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)

Takie pytanie: Czemu mieszane są dwa języki, jest jakiś powód tego? Bo ja słyszałem żeby używać tylko angielskiego a mieszanie języków to zła praktyka.

Baza world to znany zestaw danych szkoleniowych z serwisu mysql.com - stąd wszystko tam jest po angielsku. W odcinku postanowiłem natomiast stosować polskie nazwy - myślę, że to dość oczywiste, że trenujemy tutaj różne zgrupowania, a nie tworzymy projektu bazy od początku. Polskie zapisy będą też łatwiej przyswajalne dla uczniów mających problemy z angielskim. Na etapie uczenia się jak działa SQL używanie polskiego jest jak najbardziej w mojej opinii ok. Pozdrawiam!

1
komentarz 16 sierpnia 2020 przez Ehlert Ekspert (212,670 p.)
Ja myślę, że jest to krzywdzące dla osób, które mają problemy z angielskim. Korzystanie z anglojęzycznej oraz poprawnej nomenklatury w bazach danych (i nie tylko) to krok w stronę dobrych praktyk wykorzystywanych komercyjnie. Oczywiście to moja subiektywna opinia.
komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
Ale to nie chodzi o nomenklaturę, a o polską nazwę (alias) atrybutu. W jaki sposób polska nazwa atrybutu jest krzywdząca dla człowieka mającego problem z angielskim?
1
komentarz 16 sierpnia 2020 przez Ehlert Ekspert (212,670 p.)
Używając języka angielskiego stawiamy wszystkich przed faktem dokonanym. Najlepiej wyjdą na tym osoby, które mają z nim problemy. Dlaczego? Zamiast budować im poczucie bezpieczeństwa, że czegoś nie trzeba, że to za trudne, że nie teraz, dobrze jest po prostu wymagać więcej. Z tego co zauważyłem są to metody nauczycieli, których się później wspomina najlepiej.

No chyba, że targetujemy w maturę z informatyki oraz te śmieszne egzaminy zawodowe i nic poza tym.
komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
Aha, to masz na myśli. U mnie w kursach często i angielski i polski się pojawia - tak w kodach / zapytaniach jak i sposobie wypowiadania się prowadzącego często pojawia się tak polska jak i angielska nomenklatura. Tutaj cała pierwsza baza jest w ramach "oswajania" po angielsku, ale żeby nie było tylko słów obcych to atrybut wirtualny (utworzony w grupowaniu) ma nazwę polską, bo odpowiada temu co w poleceniu. Druga baza w całości jest po polsku. W mojej opinii to optymalna proporcja, żeby zadowolić osoby chcące się rozwijać w angielskim ale i nie razić purystów językowych, co się obrażają na każde słowo angielskie wypowiedziane przez informatyka (co przecież naturalne, że takie były są i będą). Też jestem przeciwny w nauczaniu "matkowaniu" i zamykaniu w mentalnych pudełkach bezpieczeństwa - wolę stabilne parcie od przodu, w dopracowanej równowadze pt. "nie zgubiłem się, ale to było trudne" - w odczuciu ucznia. Pozdrawiam!

2 odpowiedzi

+2 głosów
odpowiedź 15 sierpnia 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
Zapytania działają poprawnie, tzn. serwer MariaDB nie wyrzuca błędów. Może warto wprowadzić i inne funkcje agregujące: MAX, MIN i AVG? I koniecznie w odcinku zaznaczyć różnice pomiędzy COUNT i SUM (to akurat zwykle sprawia problemy początkującym). I jeszcze podkreślić, że w przypadku funkcji COUNT można użyć dowolnej kolumny tabeli, a nawet wieloznacznika *.

Kiedy odcinek?
1
komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
Dokładnie tak - dzięki za rady! We wrześniu (na początku) pójdzie, bo teraz sezon ogórkowy. Zawsze chciałem zrobić grupowanie, bo praktycznie zawsze jest na maturach z infy i często na egzaminach zawodowych :) Pozdrawiam
+2 głosów
odpowiedź 15 sierpnia 2020 przez adrian17 Ekspert (344,860 p.)

GROUP BY wyglądają OK, ale rzeczy na boku...

WHERE IsOfficial="T"

IsOfficial to nie bool?

FROM countrylanguage, country

...join?

komentarz 16 sierpnia 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
1. Typ BOOLEAN na serwerze MySQL jest zastępowany przez tinyint(1). Na serwerze MariaDB istnieje i przyjmuje wartości 0/1. "Obciążenie" dla bazy takie samo jak T/N.

2. W zapytaniach użyto łączenia tabel bez klauzuli JOIN. Może autor chciał pokazać alternatywny sposób łączenia lub nie mówił jeszcze o JOIN?
2
komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)
Wszystkie grupowania OK? Dziękuję, wrzuciłem zaraz po zapisaniu, nie miałem już świeżego oka, a ktoś z boku od razu by wychwycił literówki / bugi.

To jest baza szkoleniowa z serwisu mysql.com, podobnie też w bazie ptaki widzę dziwny import daty w tabeli Obserwacje :) Takie babole strukturalne poprawię przed nagraniem odcinka. Joina nie robię, bo nie było go jeszcze omówionego w kursie (mam to zaplanowane później w serii - w mojej opinii taka kolejność jest lepsza dla uczniów)

Dzięki Wam za poświęcony czas - pozdrawiam!
1
komentarz 16 sierpnia 2020 przez adrian17 Ekspert (344,860 p.)

1. Typ BOOLEAN na serwerze MySQL jest zastępowany przez tinyint(1). Na serwerze MariaDB istnieje i przyjmuje wartości 0/1. "Obciążenie" dla bazy takie samo jak T/N.

Tak, ale wciąż jest czytelniej gdy to gotowy bool i możesz używać true, false :)

Joina nie robię, bo nie było go jeszcze omówionego w kursie (mam to zaplanowane później w serii - w mojej opinii taka kolejność jest lepsza dla uczniów)

...mam deja vu z dyskusji C++owych, znowu wyjaśniam to samo.

Nie, już jest za późno, już nauczyłeś ludzi joinować. Jak N odcinków dalej widzowie zobaczą JOIN, to jakiś % z nich potraktuje go jako ciekawostkę, alternatywną składnię, którą zignorują bo już przyzwyczaili się do `FROM a, b`.

komentarz 16 sierpnia 2020 przez Mirosław Zelent Nałogowiec (34,750 p.)

...mam deja vu z dyskusji C++owych, znowu wyjaśniam to samo.

Nie, już jest za późno, już nauczyłeś ludzi joinować. Jak N odcinków dalej widzowie zobaczą JOIN, to jakiś % z nich potraktuje go jako ciekawostkę, alternatywną składnię, którą zignorują bo już przyzwyczaili się do `FROM a, b`.

Aha, no każdy ma prawo patrzeć na dydaktykę na swój sposób. W mojej opinii człowiek uczy się porcjami i cały czas naturalnie dąży do poprawiania się i rozwoju tego co robi. Wymaganie perfekcji ma tę wadę, że jest nie do zrealizowania w praktyce, bo kładzie za duży ciężar gatunkowy na osobie dopiero raczkującej. Co do drugiej części - no tak, jeśli ktokolwiek "zatrzyma" się gdzieś na drodze nauki, to automatycznie i tak zawsze zostanie z tyłu. Jeśli mimo wprowadzenia nowej decyzji wraz z jej uzasadnieniem i pokazaniem konsekwencji jakaś osoba postanowi od tej decyzji uciekać z powodu lenistwa w przyzwyczajenie to tak, właśnie się zatrzymała. Na to nie pomoże żaden nauczyciel ani tutorial. Jestem jednak zdania, że ludzie nie mający abulicznych zaburzeń z naturalną chęcią i inklinacją do rozwoju "idą dalej" na ścieżce. Pozdrawiam!

Podobne pytania

0 głosów
2 odpowiedzi 799 wizyt
pytanie zadane 27 listopada 2017 w SQL, bazy danych przez 123skiper Bywalec (2,170 p.)
+1 głos
2 odpowiedzi 604 wizyt
pytanie zadane 21 marca 2021 w SQL, bazy danych przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 604 wizyt
pytanie zadane 1 grudnia 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...