wynik podzapytania jako zmienna - postgresql
andycom - 23-05-2006 00:24
wynik podzapytania jako zmienna - postgresql
witam, mam sobie procedurkę a w niej fragmencik:
DECLARE ... BEGIN ... (SELECT sum(bk.num_kwota) AS sum FROM tb_budzet_kasa bk WHERE
k.str_rodzaj::text = 'plan'::text AND int_strona=1 AND (bk.id_item IN (Select
tid.id from tempid tid))) AS plan, (SELECT sum(bk.num_kwota) AS sum FROM tb_budzet_kasa bk WHERE bk.id_zlecenie is not null AND (bk.id_item IN (Select tid.id from tempid tid))) AS zlecenia, ... END;
takich wyliczen sumy jest kika dla jednego zapytania i teraz chcialbym zamiast wykonywac w kazdym wyliczeniu podzapytanie (Select tid.id from tempid tid) - wykonac je raz - jego wynik przypisac do zmiennej, którą mogłbym potem wprowadzic do wyliczeń sumy w miejsce obecnie wykonywanego podzapytania (Select tid.id from tempid tid) czy istnieje tak mozliwosc - jesli tak to w jaki sposób mozna to zrobić ... ???
dziekuje ze wszelkie podopowiedzi pozdrawiam andrzej
-- ============= P o l N E W S ============== archiwum i przeszukiwanie newsów http://www.polnews.pl
Piotr 'piter' Hlawski - 23-05-2006 00:25
andycom wrote:
> (Select > tid.id from tempid tid) czy istnieje tak mozliwosc - jesli tak to w jaki > sposób mozna to zrobić ... ???
DECLARE twoj_wynik numeric(5,2); -- czy jakikolwiek typ który cię satysfakcjonune BEGIN Select tid.id from tempid tid INTO twoj_wynik ..... END;
w twoj_wynik masz to co chcesz.
Tak btw. to są podstawy pl/pgsql :)
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Chuck Norris ostatnio zapisał się na lekcje karate dla początkujących, żeby móc "przypadkowo" spuścić manto małym dzieciom
andycom - 23-05-2006 00:25
>andycom wrote: > >> (Select >> tid.id from tempid tid) czy istnieje tak mozliwosc - jesli tak to w jaki >> sposób mozna to zrobić ... ??? > >DECLARE >twoj_wynik numeric(5,2); -- czy jakikolwiek typ który cię satysfakcjonune >BEGIN >Select tid.id from tempid tid INTO twoj_wynik >..... >END; > >w twoj_wynik masz to co chcesz.
dzieki za wskazówke ale to juz testowalem i to sie nie sprawdza - idac Twoim tropem:
zalózmy ze Select tid.id from tempid zwraca 4 rekordy o wartosci np: 10,2,12,15 teraz korzystajac z podopowiedzi do twoj_wynik zostaje przypisana wartos 10 a nie wartosc skalarna 10,2,12,15 co powoduje ze w zapytaniu w ktorym wyliczam sume brany jest pod uwagę tylko rekord o wartosci 10 a nie rekordy 10,2,12,15 - mi chodzi raczej jak wynik zapytania (Select tid.id from tempid tid) zapisac do zmiennej i potem przaza do zapytania select sum(kwota) where id in (twoj_wynik) ale zeby twoj_wynik nie zawieral tylko wartosci 10 ale 10,2,13,15 ... czyli to co zwraca podzapytanie w zapytaniu select sum(kwota) where id in (Select tid.id from tempid) ... ??
>Tak btw. to są podstawy pl/pgsql :)
kurcze - tego juz chyba nie ma w podstawaach a moze sie myle ... :):)
-- ============= P o l N E W S ============== archiwum i przeszukiwanie newsów http://www.polnews.pl
hubert depesz lubaczewski - 23-05-2006 00:25
andycom wrote: > dzieki za wskazówke ale to juz testowalem i to sie nie sprawdza - idac > Twoim tropem: > zalózmy ze Select tid.id from tempid zwraca 4 rekordy o wartosci np: > 10,2,12,15 teraz korzystajac z podopowiedzi do twoj_wynik zostaje
to jest operator przypisania. operator przypisania bierze jedna wartosc i przypisuje ja do zmiennej. zrob sobie select sum(costam) into zmienna from ... i masz sume to co potrzebuejsz to polaczenie wielu stringow w jeden. bylo o tym w zeszlym tygodniu na tej grupie.
depesz
-- http://www.depesz.com/ - nowy, lepszy depesz
andycom - 24-05-2006 00:17
>andycom wrote: >> dzieki za wskazówke ale to juz testowalem i to sie nie sprawdza - idac >> Twoim tropem: >> zalózmy ze Select tid.id from tempid zwraca 4 rekordy o wartosci np: >> 10,2,12,15 teraz korzystajac z podopowiedzi do twoj_wynik zostaje > >to jest operator przypisania. operator przypisania bierze jedna wartosc i >przypisuje ja do zmiennej. >zrob sobie select sum(costam) into zmienna from ... >i masz sume >to co potrzebuejsz to polaczenie wielu stringow w jeden. bylo o tym w >zeszlym tygodniu na tej grupie.
dzieki za podpowiedz - rzecz jednak nie w tym - wiem jak wyciagnac sume - problem polega na tym ze takich sum musze wyciagnac 10 a dla kazdego takieg zapytania warunkiem jest miedzy innymi takie samo podzapytanie i teraz chca ta przyspieszyc chcialem wykonacy wczesniej podzaptyanie i jakos zapisac jego wynik tak zeby dalej w zapytaniach ktore wylicziaja mi sumy juz nie trzeba bylo 10 razy wykonywac tego samego podzapytania ... polaczenie wyniku podzapytania w jeden string nic nie pomoze ... -- ============= P o l N E W S ============== archiwum i przeszukiwanie newsów http://www.polnews.pl
Piotr 'piter' Hlawski - 24-05-2006 00:17
andycom wrote:
>>andycom wrote: >>> dzieki za wskazówke ale to juz testowalem i to sie nie sprawdza - idac >>> Twoim tropem: >>> zalózmy ze Select tid.id from tempid zwraca 4 rekordy o wartosci np: >>> 10,2,12,15 teraz korzystajac z podopowiedzi do twoj_wynik zostaje >> >>to jest operator przypisania. operator przypisania bierze jedna wartosc i >>przypisuje ja do zmiennej. >>zrob sobie select sum(costam) into zmienna from ... >>i masz sume >>to co potrzebuejsz to polaczenie wielu stringow w jeden. bylo o tym w >>zeszlym tygodniu na tej grupie. > > dzieki za podpowiedz - rzecz jednak nie w tym - wiem jak wyciagnac sume - > problem polega na tym ze takich sum musze wyciagnac 10 a dla kazdego > takieg zapytania warunkiem jest miedzy innymi takie samo podzapytanie i > teraz chca ta przyspieszyc chcialem wykonacy wczesniej podzaptyanie i > jakos zapisac jego wynik tak zeby dalej w zapytaniach ktore wylicziaja mi > sumy juz nie trzeba bylo 10 razy wykonywac tego samego podzapytania ... > polaczenie wyniku podzapytania w jeden string nic nie pomoze ...
Jednak nie doczytałeś tego wątku o którym wspomniał depesz. Da się zrobić to co byś chciał. Pozwolisz, że wkleję Twój kawałek postu:
> mi chodzi raczej jak wynik zapytania (Select tid.id from tempid tid) zapisac do > *zmiennej i potem przaza do zapytania select sum(kwota) where id in > (twoj_wynik) ale zeby twoj_wynik nie zawieral tylko wartosci 10 ale 10,2,13,15 > *... czyli to co zwraca podzapytanie w zapytaniu select sum(kwota) where id in > (Select tid.id from tempid) ... ?? >
I teraz:
DECLARE tempid_wynik int4[]; BEGIN SELECT array(SELECT tid.id FROM tempid) INTO tempid_wynik; ....... SELECT sum(kwota) WHERE id = any(tempid_wynik);
Powinno zadziałać.
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Dwa razy do roku Chuck Norris zmusza swoje serce do zawału. Tym sposobem oszukuje świat i wszyscy myślą, że jest człowiekiem.
hubert depesz lubaczewski - 24-05-2006 00:17
andycom wrote: > polaczenie wyniku podzapytania w jeden string nic nie pomoze ...
jak napiszesz jeszcze raz czego potrzebujesz. mozliwie krotkimi i prostymi zdaniami. z przykladem ktory nie jest czyms innym niz to czego potrzebujesz. to wtedy moze ktos ci pomoze.
depesz
-- http://www.depesz.com/ - nowy, lepszy depesz
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 24-05-2006 00:17
Piotr 'piter' Hlawski wrote: > andycom wrote: > >>dzieki za podpowiedz - rzecz jednak nie w tym - wiem jak wyciagnac sume - >>problem polega na tym ze takich sum musze wyciagnac 10 a dla kazdego >>takieg zapytania warunkiem jest miedzy innymi takie samo podzapytanie i >>teraz chca ta przyspieszyc chcialem wykonacy wczesniej podzaptyanie i >>jakos zapisac jego wynik tak zeby dalej w zapytaniach ktore wylicziaja mi >>sumy juz nie trzeba bylo 10 razy wykonywac tego samego podzapytania ... >>polaczenie wyniku podzapytania w jeden string nic nie pomoze ... > > Jednak nie doczytałeś tego wątku o którym wspomniał depesz. Da się zrobić to > co byś chciał. Pozwolisz, że wkleję Twój kawałek postu: > >>mi chodzi raczej jak wynik zapytania (Select tid.id from tempid tid) >>zapisac do >> zmiennej i potem przaza do zapytania select sum(kwota) where id in >>(twoj_wynik) ale zeby twoj_wynik nie zawieral tylko wartosci 10 ale >> 10,2,13,15 >> ... czyli to co zwraca podzapytanie w zapytaniu select sum(kwota) where >> id in >>(Select tid.id from tempid) ... ?? > > I teraz: > > DECLARE > tempid_wynik int4[]; > BEGIN > SELECT array(SELECT tid.id FROM tempid) INTO tempid_wynik; > ...... > SELECT sum(kwota) WHERE id = any(tempid_wynik);
A jak tych id jest dużo, to może być warto użyć tabeli tymczasowej. :)
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
=?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plwawa19wwa91.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|