<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Problem z zadaniami]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=445&amp;type=atom"/>
	<updated>2010-05-25T17:56:45Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=445</id>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2061#p2061"/>
			<content type="html"><![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)]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-05-25T17:56:45Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2061#p2061</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2060#p2060"/>
			<content type="html"><![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).]]></content>
			<author>
				<name><![CDATA[Mr.Woolsky]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1109</uri>
			</author>
			<updated>2010-05-24T23:05:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2060#p2060</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2059#p2059"/>
			<content type="html"><![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?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-05-24T20:58:29Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2059#p2059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2058#p2058"/>
			<content type="html"><![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:)]]></content>
			<author>
				<name><![CDATA[Mr.Woolsky]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1109</uri>
			</author>
			<updated>2010-05-24T20:18:52Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2058#p2058</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2057#p2057"/>
			<content type="html"><![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Ę :) !!]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-05-24T18:09:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2057#p2057</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Problem z zadaniami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2056#p2056"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[Mr.Woolsky]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1109</uri>
			</author>
			<updated>2010-05-24T16:22:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2056#p2056</id>
		</entry>
</feed>
