Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PostgreSQL][SQL]pobranie rekordu jeśli suma kolumny z kilku rekordow ma min. wartość
rasten
post
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 6
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


Witam, mam do przerobienia pewien skrypt, który niestety ja nie robiłem.

W bazie jest następująca tabela (wersja okrojona):
nazwa tabeli: oferty
kolumny: idoferty, max_l_osob,...,idobiektu

Oferta ma zapisany idobiektu (czyli id do tabeli na np.jakis pensjonat itp). max_l_osob jest to maksymalna liczba osob jakie mogą zarezerwować tę ofertę. I teraz tak: na stronie jest wyszukiwarka, dla której zapytanie poberające te oferty ma ponad 70linijek ;/ i chyba z 10 inner joinów itp dlatego niechciałbym tutaj całego zapytania wrzucać, ale mam następujący problem: oferty sortowane są po idobiektu i jak pobrać tylko te oferty, których suma max_l_osob dla ofert o tym samym idobiektu! będzie miała, np. co najmniej 10?

Czyli np. teraz wyświetla oferty tak - sortując po idobiektu:
idoferty; max_l_osob; idobiektu
1 4 10
2 2 10
3 3 10
4 7 27
5 3 27
6 9 250

I jeśli szukamy ofert z takimi samymi obiektami co mają co najmniej 10 miejsc to wyświetli oferty o idoferty: 4 i 5.
Wiem, że można używać podzapytań w postgresie ale jest w tym zapytaniu dużo warunków i inner joinów, że nie wiem za bardzo jak je w takie podzapytanie zliczające te miejsca upchnąć. Czy da się to jakoś w miarę 'gładko' zrobić? Jak będziecie chcieli to mogę wrzucić przykładowe zapytanie.

Ten post edytował rasten 30.11.2010, 17:56:00
Go to the top of the page
+Quote Post
tomm
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 28
Dołączył: 7.04.2008

Ostrzeżenie: (0%)
-----


zagnieżdżone ale zwraca to co chciałeś

  1. SELECT idoferty FROM oferty WHERE idobiektu = (
  2. SELECT idobiektu FROM oferty GROUP BY idobiektu HAVING SUM(max_osob) > 9
  3. );
Go to the top of the page
+Quote Post
rasten
post
Post #3





Grupa: Zarejestrowani
Postów: 86
Pomógł: 6
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


Sorry, że dopiero teraz odpisuję, ale zająłem się innym modułem:) Działa dobrze, tylko zamieniłem '=' na 'IN'. Dzięki za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:49