1

Temat: Wyszukiwanie danych - pilna pomoc potrzbna!!!

create table PRACOWNICY
    (NR_PRAC INT NOT NULL PRIMARY KEY,
     NAZWISKO CHAR(15),
     PLEC CHAR(1) NOT NULL,
     DATA_UR DATETIME,
     NR_ZESP SMALLINT NOT NULL)

create table ZESPOLY
    (NR_ZESP SMALLINT NOT NULL PRIMARY KEY,
     NAZWA_ZESP CHAR(30) NOT NULL,
     NR_PRAC_KZ INT)

create table TEMATY
    (NR_TEM INT NOT NULL PRIMARY KEY,
     DATA_ROZP DATETIME,
     DATA_ODB DATETIME,
     NR_PRAC_KT INT,
     TEMAT CHAR(30) NOT NULL)

create table WYPLATY
    (NR_PRAC int NOT NULL,
     NR_TEM int NOT NULL,
     DATA_NALICZ datetime NOT NULL,
     DATA_WYPL datetime,
     KWOTA decimal(10, 1) NOT NULL)

2

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Hmm, jakieś zadanie domowe smile?
Dużo tego wiec po kolei (może ktoś jeszcze tez pomoże bo ja w pracy jestem smile ). Mam nadzieje że nie walnę byka
/* 4  nazwiska pracowników, którzy pracują w tym samym zespole co pracownik o nazwisku 'Y'*/

/* 4 */
select nazwisko from pracownicy where nr_zesp in (select nr_zesp from pracownicy where nazwisko='Y')

/* 5 */
select temat from tematy where nr_prac_kt in (select nr_prac from pracownicy where nazwisko='Y');

Ostatnio edytowany przez rski (2010-04-07 12:09:58)

3

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Widzę, że trafiłem na dobre forum smile
Dzięki za pomoc i proszę o więcej. big_smile

4

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

smile.
Mam nadzieje że moi studenci nie będą tu umieszczać zadań domowych smile.

/* 6 */
select nazwisko from pracownicy where nazwisko like 'S%';

/* 7 */
wszyscy pracownicy z zespołu coś zarobili?

/* 8 */
select nr_prac, avg(kwota) from wyplaty group by nr_prac;
lub
select avg(kwota) from wyplaty group by nr_prac;

/* 9 */
Zarobili w danym zespole > 1000 czy w sumie (we wszystkich zespołach w których są )

Ostatnio edytowany przez rski (2010-04-07 12:30:22)

5

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

/* 7 */
wszyscy pracownicy z zespołu coś zarobili?


/* 9 */
Zarobili w danym zespole > 1000 czy w sumie (we wszystkich zespołach w których są )

Ostatnio edytowany przez DaeronNenmacil (2010-04-07 12:56:13)

6

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Ale musisz to przetestowac

/* 7 */
select nazwa_zesp from zespoly except select nazwa_zesp from zespoly where nr_prac_kz not in (select nr_prac from wyplaty);

7

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Zanim podam resztę chciałbym abyś ty coś wymyślił smile.

8

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Cały czas kombinuje, tyle że z marnym skutkiem, ale mam nowy pomysł na dziś, więć może coś mi się uda smile

Ostatnio edytowany przez DaeronNenmacil (2010-04-08 07:12:26)

9

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

To przynajmniej pokaż co wymyśliłeś, żeby nie wyglądało że szukasz jelenia, który rozwiąże za ciebie zadania domowe.

10

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Chwilowo pracuje i brak czasu, jak tylko się odrobię to postaram się coś stworzyć, bo nie szukam "jelenia", tylko pomocy. smile

11

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

/* 7 */
select nazwa_zesp from zespoly except select nazwa_zesp from zespoly where nr_prac_kz not in (select nr_prac from wyplaty);

Ostatnio edytowany przez DaeronNenmacil (2010-04-08 12:12:35)

12

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

/* 8 */ jest naprawde proste, poradzisz sobie

/* 9 */
select nazwa_zesp from zespoly z,wyplaty w where z.nr_prac_kz=w.nr_prac group by z.nazwa_zesp having sum(kwota)>1000;


/* 10 */ cos w tym stylu chyba zadziala
select nazwisko from (select nazwisko,sum(kwota) as k1 from pracownicy p , wyplaty w where p.nr_prac=w.nr_prac group by nazwisko, p.nr_prac) t1, (select sum(kwota) as k2 from pracownicy p,wyplaty w where p.nr_prac=w.nr_prac and nazwisko='Y') t2 where t1.k1>t2.k2;

13

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

14

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Skoro tak to musisz poprawić zapytanie 9 dodając jeszcze jedną tabele analogicznie do połączenia z twojego rozwiązania.

Własnie zauważyłem że 8 tez już wcześniej rozwiązałem smile.

Czekam na inne twoje pomysły smile.

15

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

select distinct Z.NAZWA_ZESP from ZESPOLY Z except select Z.NAZWA_ZESP from ZESPOLY Z 
right outer join PRACOWNICY P on P.NR_ZESP = Z.NR_ZESP
left outer join WYPLATY W on W.NR_PRAC = P.NR_PRAC
where P.NR_PRAC not in (select W.NR_PRAC from WYPLATY W)
order by Z.NAZWA_ZESP

Ostatnio edytowany przez DaeronNenmacil (2010-04-08 14:05:55)

16

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Tylko że distinct w tej twojej wersji to jest chyba zbędny, w końcu group by generuje grupy z różnymi nazwa_zesp.

17

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

18

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

/* 11 */
select nazwa_zesp,count(*) as ilosc from pracownicy join zespoly on (pracownicy.nr_zesp=zespoly.nr_zesp) group by nazwa_zesp order by ilosc desc;

19

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

/* 11 */
select nazwa_zesp,count(*) as ilosc from pracownicy join zespoly on (pracownicy.nr_zesp=zespoly.nr_zesp) group by nazwa_zesp order by ilosc desc;

/* 12 */ - jest podobne do /* 7 */
/* 13 */ jest podobne do /* 10 */

20

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

select distinct Z.NAZWA_ZESP from ZESPOLY Z except select Z.NAZWA_ZESP from ZESPOLY Z 
right outer join PRACOWNICY P on P.NR_ZESP = Z.NR_ZESP
where P.PLEC not in (select P.PLEC from PRACOWNICY P where P.PLEC = 'M')
order by Z.NAZWA_ZESP

21

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

I jestes pewien że to działa? Mam wątpliwości.

22

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

select * from
    (select P.NAZWISKO, P.DATA_UR as D1 from PRACOWNICY P join ZESPOLY Z on P.NR_ZESP = Z.NR_ZESP where P.PLEC = 'M' and Z.NAZWA_ZESP='CERTIO' group by P.NAZWISKO, P.DATA_UR) T1, 
    (select P.NAZWISKO, P.DATA_UR as D2 from PRACOWNICY P join ZESPOLY Z on P.NR_ZESP = Z.NR_ZESP where Z.NAZWA_ZESP = 'KONGO' group by P.NAZWISKO, P.DATA_UR) T2
where T1.D1>T2.D2;

Ostatnio edytowany przez DaeronNenmacil (2010-04-09 13:21:55)

23

Odp: Wyszukiwanie danych - pilna pomoc potrzbna!!!

Coś takiego,ale nie mam pod ręką postgresa żeby sprawdzić czy gdzieś nie ma błędu.
Tylko nie wiem co za typ datetime, ktorego uzyłeś.
Jakiego postgresa uzywasz?

select nazwisko,data_ur from pracownicy p join zespoly z on(p.nr_zesp=z.nr_zesp) and
z.nazwa_zesp='XYZ' and p.data_ur>all
(select data_ur from pracownicy p1 join zespoly z1 on(p1.nr_zesp=z1.nr_zesp) and
z.nazwa_zesp='ZYX')