Strona 1 z 1

kwerendy - pomoc

: ndz lut 17, 2013 10:47 pm
autor: rox
Witam!
Chciałabym Was prosić o pomoc. Będę bardzo wdzięczna.
Muszę zrobić pracę w OpenOffice. Siedzę już sporo czasu, większość zadań zrobiłam, ale czterech ostatnich za nic na świecie nie potrafię :(

Czy ktoś mógłby mi podpowiedzieć jak je wykonać?

Zad. 6. Zaprojektuj kwerendę, która obliczy średnią ocen z przedmiotu matematyka uczniów z klasy 1B.
Kwerenda powinna wyświetlać pola: nazwę przedmiotu oraz średnią ocen (alias „Średnia ocen”). Kwerendę
zapisz pod nazwą: Zadanie 2.6.

Zad. 7. Zaprojektuj kwerendę, która obliczy ile (wszystkich) ocen cząstkowych z języka polskiego wstawiła
nauczycielka Aneta Erat. Kwerenda powinna wyświetlać pola: imię i nazwisko nauczyciela, nazwę
przedmiotu oraz liczbę ocen (alias „Liczba ocen”). Kwerendę zapisz pod nazwą: Zadanie 2.7.

Zad. 8. Zaprojektuj kwerendę, taką samą jak w zadaniu 7, która zamiast liczby wszystkich ocen
cząstkowych obliczy liczbę poszczególnych ocen cząstkowych (liczbę 1, liczbę 2, itd.). Kwerenda powinna
dodatkowo wyświetlać pole ocena. Wyniki posortuj rosnąco według oceny. Kwerendę zapisz pod nazwą:
Zadanie 2.8.

Zad. 9. Zaprojektuj kwerendę, która wśród uczniów wyszuka imiona chłopców, które w szkole powtarzają
się co najmniej 3 razy. Kwerenda powinna wyświetlać imię oraz liczbę uczniów z tym imieniem (alias
„Liczba uczniów”). Wyniki posortuj w kolejności alfabetycznej według imion. Kwerendę zapisz pod nazwą:
Zadanie 2.9.

Re: kwerendy - pomoc

: ndz lut 17, 2013 11:32 pm
autor: Jan_J
Z całym szacunkiem, ale ocierasz się o śmieszność.
Nie jesteś zainteresowana nabyciem umiejętności, tylko posiadaniem odpowiedzi na pytanie. Takie przypadki nie są sprzeczne z regulaminem forum, ale ignorowanie ich nie jest nieetyczne.
Po drugie, rozumiem: poprawki, egzaminy itp. Ale niezależnie, czy to szkoła, czy uczelnia, każdy przedmiot ma podaną literaturę, którą warto studiować.
Po trzecie, zwłaszcza na uczelni, istnieją systemy konsultacji, z których warto (w swoim czasie) korzystać.
Po czwarte, nie jesteś pierwsza z Twojej grupy. Zadawanie pytania bez upewnienia się, że odpowiedzi nie ma już w zasobach forum, jest sprzeczne z regułami jego funkcjonowania. Liczenie na kogoś, by poświęcił swój czas tylko dlatego, że mnie się nie chce ruszyć -- co tam głową -- palcem na klawiaturze -- jest pasożytnictwem. Niestety.
http://forum.openoffice.org/pl/forum/se ... rzaj%C4%85

Re: kwerendy - pomoc

: ndz lut 17, 2013 11:48 pm
autor: rox
Wybacz, ale racji nie masz :) na prawdę natrudziłam się, aby znaleźć rozwiązanie. Niestety, nasz podręcznik jest podporządkowany Microsoftowi, a nie OpenOffice'owi, na którym pracujemy w szkole. Nie poszukuję gotowej odpowiedzi, lecz podpowiedź :)

Re: kwerendy - pomoc

: ndz lut 17, 2013 11:57 pm
autor: Jan_J
A to się cieszę, że nie mam racji...
Mam nadzieję, że jeżeli lisa18 skorzystała z podpowiedzi, to i Tobie pomogą...

O wiele większy szacunek i chęć pomocy budzą problemy postawione tak:
Chcę spytać bazę taką a taką o to i to; jak sformułuję takie pytanie, to wiem że jest źle, bo ..., a jak tak poprawię na ..., to dostaję taki: ... błąd.
Pokaż, że się wysiliłaś.

Re: kwerendy - pomoc

: pn lut 18, 2013 12:30 am
autor: rox
Zadanie 6. Wybieram opcję Utwórz projekt kwerendy. Dodaję trzy tabele powiązane relacjami: Oceny, Przedmioty i Oddziały. Z tabeli Przedmioty dodaję pole Nazwa przedmiotu (w kryterium wpisuję: matematyka). Z tabeli Oddziały wybieram pole: Oznaczenie (w kryterium wpisuję: 1B). Z tabeli Oceny dodaję pole Ocena (w aliasie wpisuję "Średnia ocen", a w funkcji wybieram polecienie: średnio). Klikam Wykonaj kwerendę i pojawia mi się komunikat: Polecenie SQL prowadzące do tego błędu:

SELECT "tbOddziały"."Oznaczenie", "tbPrzedmioty"."Nazwa przedmiotu", AVG( "tbOceny"."Ocena" ) AS "Średnia ocen" FROM "tbOceny", "tbPrzedmioty", "tbOddziały" WHERE "tbOceny"."PrzedmiotID" = "tbPrzedmioty"."IDPrzedmiotu" AND "tbOddziały"."Oznaczenie" = '1B' AND "tbPrzedmioty"."Nazwa przedmiotu" = 'matematyka'

Nie rozumiem, co robię źle. Próbowałam kilka razy...

Re: kwerendy - pomoc

: pn lut 18, 2013 1:29 am
autor: Jan_J
Krok 1. Najważniejsze jest obliczenie średniej z wybranych ocen.

Kod: Zaznacz cały

select avg(Ocena) from tbOceny
policzy średnią ze wszystkiego jak leci.

Krok 2.

Kod: Zaznacz cały

select avg(Ocena) from tbOceny where ...
weźmie do średniej tylko te krotki (wiersze, rekordy -- jak je zwiesz), które spełniają warunek ... Taki warunek musi być funkcją zdaniową (tzn. wyrażeniem logicznym, któremu da się przyporządkować wartość Prawda, Fałsz albo NULL po podstawieniu konkretnych wartości).
Na przykład (brzydko):

Kod: Zaznacz cały

select avg(Ocena) from tbOceny where PrzedmiotID = 22 and OddzialID = 3455
Brzydkość wiąże się z tym, że opis realnego świata korzysta z pojęć takich, jak: dostatecznie, 3.0, matematyka, 1B, Jurek Nowak, ale nie ma pojęcia o wartościach kluczy identyfikujących i wiążących dane w bazie. Takie pytanie korzysta z wewnętrznej organizacji konkretnej bazy.
Nie da się spytać tabeli Oceny ani o klasę 1B, ani o matematykę. Jeżeli przejrzymy zawartość, to widzimy, że takich pojęć -- ba: miejsca na nie! -- tam po prostu nie ma. One są w innych tabelach.

Krok 3.
Dlatego potrzebujemy łączyć tabele ze sobą. Istnieje kilka składni pozwalających to uzyskać. Niektóre jawnie korzystają z operacji tabela1 JOIN tabela2 ON warunek albo tabela1 JOIN tabela2 USING(nazwa_kolumny).

Wynikiem takiego złączenia byłaby tabela Oceny poszerzona o kolumny z tabeli Oddziały (wartości odpowiadające klasie, w której dokonano oceny) oraz o kolumny z tabeli Przedmioty (z wartościami odpowiadającymi przedmiotowi, z którego wystawiono daną ocenę). To jest bardzo jasna intuicyjnie operacja, i warto ją przeprowadzić na krótkich tabelach samemu, ręcznie -- bez użycia komputera, żeby zrozumieć jak to działa.

W Twojej wersji jest inaczej: wykonujesz tzw pełnie połączenie (FULL JOIN) przerzucając warunek dopasowania wierszy na etap warunku filtrującego (wyboru): ... FROM tabela1, tabela2 WHERE warunek.

Wynikiem takiego złączenia jest olbrzymia tabela zawierająca wszystkie możliwe kombinacje wierszy z tabel Przedmioty, Oceny i Oddziały, z których następnie wybieramy (WHERE) te sensowne i spełniające nasze potrzeby). Wynik będzie ten sam co poprzednio.
Prawdziwy system nie będzie tworzył tej ogromnej śmieciowej tabeli, ręcznie też nie chcielibyśmy jej pisać.

W Twojej konstrukcji

Kod: Zaznacz cały

SELECT "tbOddziały"."Oznaczenie", "tbPrzedmioty"."Nazwa przedmiotu", AVG( "tbOceny"."Ocena" ) AS "Średnia ocen" FROM "tbOceny", "tbPrzedmioty", "tbOddziały" WHERE "tbOceny"."PrzedmiotID" = "tbPrzedmioty"."IDPrzedmiotu" AND "tbOddziały"."Oznaczenie" = '1B' AND "tbPrzedmioty"."Nazwa przedmiotu" = 'matematyka'
masz warunek złożony (koniunkcja, czyli AND), w którym fraza pierwsza opisuje sensowne złączenie ocen i przedmiotów, fraza druga wybiera oddział, fraza trzecia wybiera przedmiot. Ale brakuje frazy decydującej o dopasowaniu ocen do oddziału. Nie znając struktury tabel nie da się jej dopisać bezbłędnie.

Krok 4.
Mamy dostać nazwę przedmiotu i średnią.

Kod: Zaznacz cały

SELECT nazwa as "Przedmiot", AVG(..) as "Średnia" FROM ...
Wariant 1, prostszy: nazwa to po prostu stała tekstowa 'matematyka'. Wada jest taka, że dana wejściowa pojawia się w zapytaniu dwukrotnie. Kto to przegapi i zmodyfikuje pytanie, dostanie fałszywą odpowiedź.

Wariant 2: grupować odpowiedzi wg przedmiotów, ale wziąć tylko grupę dot. wartości matematyka. Wbrew pozorom pozostałe grupy nie będą w ogóle konstruowane w bazie. To wymaga znajomości klauzuli grupuj (GROUP BY) oraz wyboru grup (HAVING). Jest więc bardziej zaawansowany, ale eliminuje możliwość głupich pomyłek przy przeredagowaniu pytania.

Krok 5.
Graficzny asystent tworzenia zapytań. Moim zdaniem on ogranicza, nie pomaga. Przynajmniej do jakiegoś tam stopnia złożoności problemu. No ale zawsze można podejrzeć w widoku SQL, co się zbudowało, i to poprawiać.

Są lepsze i gorsze asystenty zapytań. Niektóre porażają kreatywnością; inne są takie sobie. Spodobały mi się: DbWrench oraz DbVisualizer -- oba w wersjach komercyjnych, które można sobie na pewien czas ściągnąć do darmowego testowania. Asystent wbudowany w OO Base jest dość toporny, niestety.

Re: kwerendy - pomoc

: wt lut 19, 2013 11:23 pm
autor: hasheq
A tak z innej strony

lisa18
Zaprojektuj kwerendę, która obliczy średnią ocen z przedmiotu biologia uczniów z klasy 1A. Kwerenda powinna wyświetlać pola: nazwę przedmiotu oraz średnią ocen (alias „Średnia ocen”). Kwerendę zapisz pod nazwą: Zadanie 9.6.
rox

Zad. 6. Zaprojektuj kwerendę, która obliczy średnią ocen z przedmiotu matematyka uczniów z klasy 1B.Kwerenda powinna wyświetlać pola: nazwę przedmiotu oraz średnią ocen (alias „Średnia ocen”). Kwerendę zapisz pod nazwą: Zadanie 2.6.
*podkreślenia własne

Ludzie nie wiem do jakiej szkoły uczęszczacie, nie chcę was obrażać, ale miejcie litość te zadania w praktyce się nie różnią.