gtsla86 Napisano Wrzesień 7, 2009 Zgłoszenie Share Napisano Wrzesień 7, 2009 Witam. Mam pewnien problem, mam dwa zadania z sql-a na zaliczenie: 1 Medianę niepustego zbioru N liczb rzeczywistych można zdefiniować w sposób następujący: * jeśli 0 < N < 3, medianą jest średnia arytmetyczna; * jeśli N > 2, to mediana zbioru jest równa medianie zbioru N-2 liczb, otrzymanego przez odrzucenie najmniejszej i największej (ew. po jednej z ..). Dla tabeli o nazwie T, posiadającej (m. in.) kolumnę X typu FLOAT NOT NULL, obliczyć za pomocą SQL medianę zawartości tej kolumny. Skomentować w paru zdaniach zasadę działania podanego rozwiązania. 2 Niech tabela EX posiada (m.in.) kolumny (ID int unsigned primary key, PUNKTACJA int unsigned). Napisać zapytanie zwracające tabelę wynikową postaci (LOKATA, PUNKTACJA, ID), gdzie LOKATA opisuje pozycję danego ID wg. malejącej punktacji, ale w przypadku `remisu' przyznaje się ten sam nr lokaty. Wiersze (wartości ID) dla których w polu PUNKTACJA występuje NULL są w wyniku pominięte. oraz rozwiązania do tych zadań: zadanie 1 TWORZENIE TABELI Cytuj CREATE TABLE mediana ( id INTEGER NOT NULL DEFAULT autoincrement, mediana INTEGER NULL, PRIMARY KEY ( id ) ); ________________________________________ ROZWIĄZANIE Cytuj create variable @wynik int; create variable @max int; create variable @min int; create variable @liczba int; begin select count(mediana) into @liczba from mediana; select max(mediana) into @max from mediana; select min(mediana) into @min from mediana; if @liczba < 3 then select (sum(mediana)/count(mediana)) into @wynik from mediana; message @wynik to client; else select (sum(mediana)/count(mediana)) into @wynik from mediana where (mediana < @max) and (mediana > @min); message @wynik to client; end if; drop variable @wynik; drop variable @max; drop variable @min; drop variable @liczba; end; ________________________________________ dane w tabeli mediana to: 8,13,18,148,275,367 zadanie 2 tworzenie dodatkowego pola w tabeli Cytuj alter table klasyfikacja add pozycja integer Cytuj begin declare @nrzawodnika int; declare @punktacja int; declare @pozycja int; declare kur_klasyf cursor for select id, punktacja from klasyfikacja order by punktacja desc; set @pozycja = 1; alter table klasyfikacja add modyf integer; update klasyfikacja set pozycja =0; update klasyfikacja set modyf =0; open kur_klasyf; petla: loop fetch next kur_klasyf into @nrzawodnika, @punktacja; if sqlcode <> 0 then leave petla end if; update klasyfikacja set pozycja = @pozycja where modyf = 0 and punktacja = (select max(punktacja) from klasyfikacja where modyf=0); update klasyfikacja set modyf = 1 where punktacja = (select max(punktacja) from klasyfikacja where modyf=0); set @pozycja = @pozycja + 1; end loop petla; close kur_klasyf; alter table klasyfikacja drop modyf; end; i mam takie małe skromne pytanie czy ktoś wie jak uprościć te zapytania sql? Zgóry dziękuję za pomoc i pozdrawiam wszystkich. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
qmic Napisano Wrzesień 7, 2009 Zgłoszenie Share Napisano Wrzesień 7, 2009 i mam takie małe skromne pytanie czy ktoś wie jak uprościć te zapytania sql? Zgóry dziękuję za pomoc i pozdrawiam wszystkich. Ja bym zrobił wcięcia:), Pozdrawiam i Ciebie Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się