<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Problem z zadaniami]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=445</link>
		<description><![CDATA[Najświeższe odpowiedzi w Problem z zadaniami.]]></description>
		<lastBuildDate>Tue, 25 May 2010 17:56:45 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2061#p2061</link>
			<description><![CDATA[Zadanie 3. jest podobne do 1.
Wystarczy tylko zmienić NOT IN na IN i zmienić zapytanie zagnieżdżone tak aby zwracało id pracowników którzy dostali co najmniej dwie wypłaty w jednym miesiącu (grupowanie po id_pracownika i miesiącu a miesąc wyciągniesz z daty za pomocą date_part)]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 25 May 2010 17:56:45 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2061#p2061</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2060#p2060</link>
			<description><![CDATA[Dziękuję bardzo za pomoc:) W zadaniu trzecim-w jednym miesiącu tego samego roku, tak mi się wydaje, bo to by pasowało do danych z tabeli( wszystkie wypłaty z 2009).]]></description>
			<author><![CDATA[dummy@example.com (Mr.Woolsky)]]></author>
			<pubDate>Mon, 24 May 2010 23:05:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2060#p2060</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2059#p2059</link>
			<description><![CDATA[AD 2.
A co z osobami które nie otrzymały wypłaty, wyświetla ci zero?

AD 1.
Chyba bardzo lubisz GROUP BY :).
To może tak
[code]
SELECT o.imie, o.nazwisko
FROM osoba2 o
WHERE date_part('month', TIMESTAMP data_ur)=5 AND 
o.id_osoba NOT INT (SELECT id_osoba FROM wyplaty)
ORDER BY o.nazwisko ASC, o.imie ASC;
[/code]

AD 3.
Zadałem pytanie, czy "jednym miesiacu otrzymaly wiecej niz jedna wyplate".
oznacza w jednym miesiącu tego samego roku?]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Mon, 24 May 2010 20:58:29 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2059#p2059</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2058#p2058</link>
			<description><![CDATA[Zadanie 2 Rozwiązałem tak :

SELECT o.imie, o.nazwisko, SUM(w.kwota)
FROM osoba2 o, wyplata2 w
WHERE o.id_osoba=w.id_osoba
GROUP BY o.id_osoba, o.nazwisko, o.imie
HAVING COUNT(w.id_osoba) < 6;

i robiłem je na podstawie przykładu 1-7 z Tutoriala, wiec myślę, że jest poprawnie rozwiązane.

Z zadaniem 1 kombinowałem tak: 

SELECT o.imie, o.nazwisko
FROM osoba2 o JOIN wyplata2 w 
ON o.id_osoba=w.id_osoba
WHERE id_wyplata IS NULL
GROUP BY w.id_osoba, o.nazwisko, o.imie, o.data_ur 
HAVING date_part('month', data_ur)=5
ORDER BY o.nazwisko ASC, o.imie ASC;

i tutaj dalej jest źle:P 

Jeśli ktoś jest w stanie mi pomoc to proszę o konkretniejsze podpowiedzi, bo nie jest łatwo.

P.S. To nie jest zadanie domowe- bynajmniej nie moje:)]]></description>
			<author><![CDATA[dummy@example.com (Mr.Woolsky)]]></author>
			<pubDate>Mon, 24 May 2010 20:18:52 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2058#p2058</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2057#p2057</link>
			<description><![CDATA[No ale żeby zadania domowe wrzucać na forum ... ach ta młodzież
AD 1.
Użyj warunku któy mówi że id_osoby nie występuje (NOT IN) w tabeli wypłaty

AD2.
No tego chyba nie przemyślałeś. Gdzie jest GROUP BY?
Najpierw wymyśl zapytanie, które wybierze osoby które nie miały więcej niż 5 wypłat.
Potem wstaw tego SELECT'a do warunku WHERE.

AD3. 
W jednym miesiącu tego samego roku?

I UCZ SIĘ :) !!]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Mon, 24 May 2010 18:09:33 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2057#p2057</guid>
		</item>
		<item>
			<title><![CDATA[Problem z zadaniami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2056#p2056</link>
			<description><![CDATA[Mam podane dwie tabele i trzy zadania do nich. Próbowałem coś wymyślić, ale nie są to dobre rozwiązania:P Prosze o podanie poprawnych rozwiązań. Z góry dziękuję:)


DROP TABLE osoba2;
DROP TABLE wyplata2;

CREATE TABLE osoba2 (
	id_osoba        INT     NOT NULL,
	imie            VARCHAR(20) NOT NULL,
	nazwisko        VARCHAR(20) NOT NULL,
	data_ur         DATE,
	PRIMARY KEY (id_osoba));

INSERT INTO osoba2 VALUES (1, 'Jan', 'Kowalski','1971-09-18');
INSERT INTO osoba2 VALUES (2, 'Jerzy', 'Nowak','1973-11-07');
INSERT INTO osoba2 VALUES (3, 'Jakub', 'Kargul','1981-01-13');
INSERT INTO osoba2 VALUES (4, 'Anna', 'Pawlak','1975-12-19');
INSERT INTO osoba2 VALUES (5, 'Henryk', 'Majewski','1975-05-19');


CREATE TABLE wyplata2 (
	id_wyplata      INT     NOT NULL,
	id_osoba        INT     NOT NULL,
	kwota           INT  NOT NULL,
	tytulem         VARCHAR(25) NOT NULL,
	data_wplaty     DATE,
	PRIMARY KEY (id_wyplata));
	
	
INSERT INTO wyplata2 VALUES (1,1,3100,'wyplata styczen 2009','2009-01-10');
INSERT INTO wyplata2 VALUES (2,1,3100,'wyplata luty 2009','2009-02-10');
INSERT INTO wyplata2 VALUES (3,1,3100,'wyplata marzec 2009','2009-03-10');
INSERT INTO wyplata2 VALUES (4,1,3100,'wyplata kwiecien 2009','2009-04-10');
INSERT INTO wyplata2 VALUES (5,1,3100,'wyplata maj 2009','2009-05-10');
INSERT INTO wyplata2 VALUES (6,1,3100,'wyplata czerwiec 2009','2009-06-09');
INSERT INTO wyplata2 VALUES (7,2,4500,'wyplata styczen 2009','2009-01-10');
INSERT INTO wyplata2 VALUES (8,2,4500,'wyplata luty 2009','2009-02-10');
INSERT INTO wyplata2 VALUES (9,2,1000,'wyplata luty 2009','2009-02-15');
INSERT INTO wyplata2 VALUES (10,3,9100,'wyplata styczen 2009','2009-01-10');


--Zad A1
--Wyswietlic alfabetycznie osoby (nazwiska i imiona), które urodzily sie w 
--miesiacu maju i nie otrzymaly dotad zadnej wyplaty.

SELECT o.imie, o.nazwisko
FROM osoba2 o JOIN wyplata2 w 
ON o.id_osoba=w.id_osoba
WHERE date_part('month', TIMESTAMP data_ur)=5 AND id_wyplata IS NULL 
ORDER BY o.nazwisko ASC, o.imie ASC;


--Zad A2
--Dla kazdej osoby znalezc laczna sume wyplat, o ile nie bylo dla tej osoby 
--wiecej niz 5 wyplat. (Dla osob, ktore nie otrzymaly zadnej wyplaty taka 
--suma powinna wynosic zero.)

SELECT o.imie, o.nazwisko, SUM(w.kwota) 
FROM osoba2 o JOIN wyplata2 w
ON o.id_osoba=w.id_osoba
ORDER BY o.nazwisko ASC, o.imie ASC
HAVING COUNT(w.id_osoba) < 5;

--Zad A3
--Wyszukac osoby, ktore choc w jednym miesiacu otrzymaly wiecej niz jedna wyplate.]]></description>
			<author><![CDATA[dummy@example.com (Mr.Woolsky)]]></author>
			<pubDate>Mon, 24 May 2010 16:22:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2056#p2056</guid>
		</item>
	</channel>
</rss>
