Skocz do zawartości

Zadania W Sql


gtsla86

Rekomendowane odpowiedzi

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

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

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ę
×
×
  • Dodaj nową pozycję...