<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Problem z posortowaniem]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1200&amp;type=atom"/>
	<updated>2012-01-27T03:07:42Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1200</id>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3383#p3383"/>
			<content type="html"><![CDATA[Dzięki za wszystko :) Problem polegał na tym że się musiałem wykorzystać warunek "idWydawnictwo"!="Wydawnictwo_idWydawnictwo".  Zrobiłem to w końcu w ten sposób:
    Select distinct
        0,
        nazwa
    From
        projekt_1."Wydawnictwo",
        projekt_1."Ksiazka"
    where
        "idWydawnictwo" Not In (
            Select distinct
                "Wydawnictwo_idWydawnictwo"
            From
                projekt_1."Wypozyczenie",
                projekt_1."Ksiazka"
            where
                "Wypozyczenie"."Ksiazka_idKsiazka"="Ksiazka"."idKsiazka"
             ) and
        "idWydawnictwo"!="Wydawnictwo_idWydawnictwo";]]></content>
			<author>
				<name><![CDATA[Student]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1341</uri>
			</author>
			<updated>2012-01-27T03:07:42Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3383#p3383</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3374#p3374"/>
			<content type="html"><![CDATA[Moim zdaniem może nie będzie to najbardziej optymalne podejście, ale najłatwiej jest wyszukać wszystkie id'ki wydawnictw, które już maja wypożyczenia (mogą się powtarzać, dlatego warto użyć DISTINCT, szczególnie dla większych ilosci danych może dać spory speedup), a następnie użyć konstrukcji NOT IN otrzymując pozostałe, dodatkowo można to ująć w CTE oddzielając obydwa kroki od siebie:

[code]With "WydawnictwoWyp" As (
    Select Distinct "Wydawnictwo_idWydawnictwo"
    From projekt_1."Ksiazka" k Inner Join projekt_1."Wypozyczenie" w
    On k."idKsiazka" = w."Ksiazka_idKsiazka"
)
Select "idWydawnictwo", nazwa
From projekt_1."Wydawnictwo"
Where "idWydawnictwo" Not In (Select "Wydawnictwo_idWydawnictwo" From "WydawnictwoWyp")
Order By nazwa;[/code]

Można by użyć jeszcze w podobny sposób EXCEPT:

[code]Select "idWydawnictwo", nazwa From projekt_1."Wydawnictwo"
Inner Join
    (Select "idWydawnictwo" From projekt_1."Wydawnictwo"
    Except
    Select Distinct "Wydawnictwo_idWydawnictwo"
    From projekt_1."Ksiazka" k Inner Join projekt_1."Wypozyczenie" w
    On k."idKsiazka" = w."Ksiazka_idKsiazka") s Using ("idWydawnictwo")
Order By nazwa;[/code]]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2012-01-24T13:30:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3374#p3374</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3372#p3372"/>
			<content type="html"><![CDATA[Przepraszam że odświeżę ale mam problem z zapytaniem do tej samej bazy danych.  Dostałem na zaliczenie egzaminu turbo wysublimowane zadanie, nie mam już pomysłów. Wypisać nazwy wydawnictw dla których książek nie ma wypożyczeń. Udało mi się wypisać id wydawnictw dla których są jakiekolwiek wypożyczenia, ale nie mam w ogóle pomysłu co dalej i czy w dobrym kierunku idę. Jak by ktoś by mi podpowiedział czy tak się da to zrobić i jaka funkcja była by przydatna byłbym wdzięczny :) PS zrobił bym to countem ale gdy jest 0 to count nic nie zwraca albo nie rozumiem co zwraca ;/
select
    projekt_1."Ksiazka"."Wydawnictwo_idWydawnictwo" as nazwa_wydawnictwa
from
    projekt_1."Wydawnictwo",
    projekt_1."Ksiazka"
right join
    projekt_1."Wypozyczenie"
on
    projekt_1."Wypozyczenie"."Ksiazka_idKsiazka" = projekt_1."Ksiazka"."idKsiazka"
group by
    nazwa_wydawnictwa order by projekt_1."Ksiazka"."Wydawnictwo_idWydawnictwo";]]></content>
			<author>
				<name><![CDATA[Student]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1341</uri>
			</author>
			<updated>2012-01-23T22:49:40Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3372#p3372</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3366#p3366"/>
			<content type="html"><![CDATA[Dzięki ;) Nie znam składni i myślałem że group samo w sobie działa jako order]]></content>
			<author>
				<name><![CDATA[Student]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1341</uri>
			</author>
			<updated>2012-01-19T15:00:13Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3366#p3366</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3365#p3365"/>
			<content type="html"><![CDATA[Takie zapytanie nie miało prawa zadziałać, gdyż zawarłeś ilosc (alias na count(*)) w grupowaniu, które nie może zawierać funkcji agregujących, od tego jest choćby klauzula Having, czy też lista przy Select. Sądzę, że chodziło Ci o coś takiego:

[code]Select
    projekt_1."Autor"."idAutor",
    count(projekt_1."Wypozyczenie"."idWypozyczenie") As ilosc
From
    projekt_1."Wypozyczenie",
    projekt_1."Autor",
    projekt_1."Autorzy"
Where
    projekt_1."Wypozyczenie"."Ksiazka_idKsiazka" = projekt_1."Autorzy"."Ksiazka_idKsiazka"
    And projekt_1."Autorzy"."Autor_idAutor" = projekt_1."Autor"."idAutor"
Group By
    projekt_1."Autor"."idAutor"
Order by ilosc Desc;[/code]

Przykładowy wynik:

[code] idAutor | ilosc
---------+-------
       1 |     4
       2 |     2
       3 |     1
(3 rows)[/code]]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2012-01-19T10:44:59Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3365#p3365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Problem z posortowaniem]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3363#p3363"/>
			<content type="html"><![CDATA[Witam, zacznę konkretnie [url=http://153.19.8.1/PG/projektsql.pdf]tu jest projekt encji mojej bazy danych[/url], trochę pokićkany ale mniej wiecej. Problem mam z uzyskaniem listy autorów posortowaną według liczby wypożyczeń ich książek. Ponieważ kosola zwraca "aggregates not allowed in GROUP BY clause" więc podejrzewam że nie można tak zrobić:
select projekt_1."Autor"."idAutor", projekt_1."Autor".imie, projekt_1."Autor".nazwisko, count(*) as ilosc from projekt_1."Wypozyczenie", projekt_1."Autor",projekt_1."Autorzy" where projekt_1."Wypozyczenie"."Ksiazka_idKsiazka" = projekt_1."Autorzy"."Ksiazka_idKsiazka" and projekt_1."Autorzy"."Autor_idAutor" = projekt_1."Autor"."idAutor" group by ilosc, projekt_1."Autor"."idAutor";

W takim razie jak pogrupować to według kolumny zliczającej nie używając zliczania do grupowania? nie trzeba chyba picać całego skryptu żeby to posortować prawda?]]></content>
			<author>
				<name><![CDATA[Student]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1341</uri>
			</author>
			<updated>2012-01-19T01:19:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3363#p3363</id>
		</entry>
</feed>
