Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Uslovljavanje select-a po skupu uredjenih parova?

[es] :: Baze podataka :: Uslovljavanje select-a po skupu uredjenih parova?

[ Pregleda: 4307 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kenny_zakon

Član broj: 68428
Poruke: 13
*.dialup.sezampro.yu.



Profil

icon Uslovljavanje select-a po skupu uredjenih parova?20.09.2005. u 16:06 - pre 225 meseci
Imam problem, i licno sam mislio da ovo moze da se uradi, ali konstantno dobijam gresku kako u SQL Sever-u, tako i u Access-u. Elem, hocu da uslovim select po uredjenim parovima, nesto kao:

select radnik, plata from tabela where (radnik, plata) in (select radnik, plata from....)

Ovako izgleda veoma banalno, ali prostije nisam mogao da definisem problem. Zasto IN ne prihvata skupove, i da li postoji neki drugi operator za to?

Pomagajte :)
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.neobee.net.



+41 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?20.09.2005. u 16:43 - pre 225 meseci
Moras da razdvojis uslove:
Code:

SELECT radnik, plata FROM tabela WHERE radnik IN (SELECT radnik FROM....) AND plata IN (SELECT plata FROM...)
 
Odgovor na temu

kenny_zakon

Član broj: 68428
Poruke: 13
*.dialup.sezampro.yu.



Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?20.09.2005. u 17:20 - pre 225 meseci
Evo napravicu primer kako bi objasnio sta mi treba.

Imam dve tabele, prva je radnik:
radnik | plata | id_odeljenje
Ivan - 15000 - 1
Marko - 10000 - 1
Goran - 10000 - 2
Mirko - 5000 - 2

druga je odeljenje
id_odeljenje | naziv
1 - Proizvodnja
2 - Izvoz

treba mi upit koji ce izbaciti najbolje placene radnike iz svih odeljenja, dakle rezultat bi trebao da bude:

Ivan - 15000 - 1
Goran - 10000 - 2

Mislim da je to jasno, e sad upit u predhodnom postu bi izgledao ovako:

select ime, plata, id_odeljenje from radnik where (plata, id_odeljenje) IN (select max(plata), id_odeljenje from radnik group by id_odeljenje)

Da li sada neko moze pomoci???

[Ovu poruku je menjao kenny_zakon dana 20.09.2005. u 18:22 GMT+1]
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?20.09.2005. u 21:46 - pre 225 meseci
Zar resenje tvog problema nije:
Code:

SELECT r.radnik, MAX(r.plata) as plata, o.naziv, r.id_odeljenje 
FROM radnik r, odeljenje o 
WHERE r.id_odeljenje=o.id_odeljenje 
GROUP BY r.id_odeljenje, r.plata

Napomena: grupisanje po koloni plata mozda i nije potrebno ali mi se cini
da po SQL specifikaciji mora da se vrsi grupisanje kolona nad kojima
se vrse agregatne funkcije
Edit:
Ovaj upit se bas ne snalazi najbolje kada vise radnika ima istu platu koja je najveca u odeljenje jer se tada ispisuje ime samo jednog radnika. U tom slucaju za nalazenje odgovarajuceg upita moras da koristis subselect i kljucnu rec FOR ALL)




[Ovu poruku je menjao _owl_ dana 20.09.2005. u 23:03 GMT+1]
Owl
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?22.09.2005. u 16:10 - pre 225 meseci
SQL izkaz koji je dao _owl_ tesko da bi proradio.

Sto coveku treba moze da se resi uz upotrebu subkverija ili kombinacijom dva kverija. Ovo je bilo pitanje:
Citat:
treba mi upit koji ce izbaciti najbolje placene radnike iz svih odeljenja, dakle rezultat bi trebao da bude:

Ivan - 15000 - 1
Goran - 10000 - 2


Obican GROUP BY kveri daje pola resenja, vrednost max plate po odeljenju, ovako:

SELECT ID_Odeljenje, MAX(Plata) AS MaxPlata
FROM Radnik
GROUP BY ID_Odeljenje

Nedostaje Radnik (ili vise njih) za svakom odeljenje cija je plata jednaka MaxPlata.
U postojeci kveri, radnik ne moze tek tako da se ubaci. Ali moze ovo (barem u MS SQL):

Ovako moze
Code:

CREATE TABLE [tblRadnici] (
    [Radnik_ID] [int] NOT NULL ,
    [ID_Odeljenje] [int] NOT NULL ,
    [Plata] [money] NOT NULL ,
    CONSTRAINT [PK_tblRadnici] PRIMARY KEY  CLUSTERED 
    (
        [Radnik_ID]
    )  ON [PRIMARY] 
) ON [PRIMARY]


GO

SELECT ID_Odeljenje,Plata,Radnik_ID  
FROM tblRadnici 
ORDER BY ID_Odeljenje, Plata DESC

ID_Odeljenje Plata                 Radnik_ID   
------------ --------------------- ----------- 
           1               15.0000           2 
           1               13.0000           4 
           1               12.0000           1 
           1                8.0000           3 
           2               16.0000           5 
           2               16.0000           8 
           2               15.0000           7 
           2               12.0000           6 
           3               12.0000           9 
           3               10.0000          10 
           3                8.0000          12 
           3                5.0000          11 

(12 row(s) affected)


MS SQL statement koja zavrsava posao:
Code:

SELECT 
    A.Radnik_ID
    , A.ID_Odeljenje
    , A.Plata 
FROM tblRadnici AS A
WHERE
    A.Plata = ( 
            SELECT MAX(Plata)
            FROM tblRadnici As B
            WHERE A.ID_Odeljenje=B.ID_Odeljenje
            GROUP BY ID_Odeljenje
            )
ORDER BY A.ID_Odeljenje

-- Rezulatti, primeti 2 radnika u odeljenju 3 koja imaju max platu:
Radnik_ID   ID_Odeljenje Plata                 
----------- ------------ --------------------- 
          2            1               15.0000 
          5            2               16.0000 
          8            2               16.0000 
          9            3               12.0000 

(4 row(s) affected)

Mozda je lakse iz dva koraka:
Code:

-- Kreiras view
CREATE VIEW dbo.vwMaxPlata
AS
SELECT ID_Odeljenje, MAX(Plata) AS MaxPlata
FROM tblRadnici AS A
GROUP BY ID_Odeljenje
GO

--- onda kombinujes view i tabelu:
SELECT 
    A.Radnik_ID
    , A.ID_Odeljenje
    , A.Plata 
FROM tblRadnici AS A
INNER JOIN vwMaxPlata AS B 
    ON A.ID_Odeljenje=B.ID_Odeljenje 
    AND A.Plata=B.MaxPlata
ORDER BY A.ID_Odeljenje

-- Rezultati:
Radnik_ID   ID_Odeljenje Plata                 
----------- ------------ --------------------- 
          2            1               15.0000 
          5            2               16.0000 
          8            2               16.0000 
          9            3               12.0000 

(4 row(s) affected)


Nadam se da je pomoglo.

 
Odgovor na temu

kenny_zakon

Član broj: 68428
Poruke: 13
*.ppp-bg.sezampro.yu.



Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?26.09.2005. u 19:22 - pre 225 meseci
Svaka cast!!! :)
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?11.11.2005. u 11:29 - pre 223 meseci
Citat:
Zidar: SQL izkaz koji je dao _owl_ tesko da bi proradio.

Mozda je lakse iz dva koraka:
Code:

-- Kreiras view
CREATE VIEW dbo.vwMaxPlata
AS
SELECT ID_Odeljenje, MAX(Plata) AS MaxPlata
FROM tblRadnici AS A
GROUP BY ID_Odeljenje
GO

--- onda kombinujes view i tabelu:
SELECT 
A.Radnik_ID
, A.ID_Odeljenje
, A.Plata 
FROM tblRadnici AS A
INNER JOIN vwMaxPlata AS B 
ON A.ID_Odeljenje=B.ID_Odeljenje 
AND A.Plata=B.MaxPlata
ORDER BY A.ID_Odeljenje

-- Rezultati:
Radnik_ID   ID_Odeljenje Plata                 
----------- ------------ --------------------- 
          2            1               15.0000 
          5            2               16.0000 
          8            2               16.0000 
          9            3               12.0000 

(4 row(s) affected)


Zasto ste toliko iskomplikovali stvar ? Zar nije prirodnije da query izgleda ovako :

SELECT odelenje,
(SELECT top 1 radnik FROM Radnici r WHERE r.odelenje = o.[id] ORDER BY plata DESC ) AS ImeRadnika,
(SELECT top 1 plata FROM Radnici r WHERE r.odelenje = o.[id] ORDER BY plata desc ) AS Plata
FROM Odelenja AS o
ORDER BY Odelenje;

Pozdrav


[Ovu poruku je menjao branimir.ts dana 11.11.2005. u 12:32 GMT+1]
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?14.11.2005. u 19:03 - pre 223 meseci
Sta je prirodnije, to je filozofsko pitanje

Tvoje resenje radi, i dobro je da si ga postavio, hvala na prilogu.

Ima jedna sitna razlika u resenjime. Tvoje resenje ce dati tacno jednog radnika po odeljenju. Medjutim, ako u odeljenju ima vise radnika koji imaju maksimalnu platu, tvoj kveri ce i dalje prikazivati samo jednog od njih, kojeg, to niko ne zna. Kveri koji sam ja postavio vratice sve radnike koji imaju najvecu platu u odeljenju. U zavisnosto od toga sta se trazi, jedan ili drugi kveri ce odraditi posao.

Za pitanje "Prikazi tacno jednog radnika po odeljenju sa maksimalnom platom" tvoj kveri daje bolji odgovor - tacno jednog radnika.

Za pitanje:"Prikazi (sve) radnike koji imaju najvecu platu u odeljenju" moj kveri daje tacan odgovor - sve radnike.

A ono sa dva koraka, to je zbog jasnoce. Ni moj kveri-subkveri ni tvoj kveri-subkveri nisu bas ocigledni na prvi pogled za nekoga ko se s tim nije sreo.





[Ovu poruku je menjao Zidar dana 14.11.2005. u 20:04 GMT+1]
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?15.11.2005. u 08:09 - pre 223 meseci
Citat:
Zidar: Sta je prirodnije, to je filozofsko pitanje :-)
Za pitanje:"Prikazi (sve) radnike koji imaju najvecu platu u odeljenju" moj kveri daje tacan odgovor - sve radnike.


Mislis, sve radnike ciji je iznos plate jednak, i ciji je iznos plate ujedno najveci- u odredjenom odeljenju.

Zanima me, kako bi ti sutradan modifikovao tvoj query (ako se poslodavac , recimo predomisli) , da ti prikazuje tacno 4 radnika po odredjenom odeljenju , sa najvecom platom-- u tome i jeste poenta mog pristupa.

Pozdrav
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?15.11.2005. u 08:35 - pre 223 meseci
Citat:
branimir.ts: Zanima me, kako bi ti sutradan modifikovao tvoj query (ako se poslodavac , recimo predomisli) , da ti prikazuje tacno 4 radnika po odredjenom odeljenju , sa najvecom platom-- u tome i jeste poenta mog pristupa.

A kako bi to tačno izgledalo u tvom pristupu? TOP 4 u subquery-ju?
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?15.11.2005. u 10:10 - pre 223 meseci
Citat:
jablan: A kako bi to tačno izgledalo u tvom pristupu? TOP 4 u subquery-ju?

Hehe. Naravno da ne. Top X u mom queryju je genericko polje, sto znaci da ne moze vratiti vise od jedne vrednosti, u konstrukciji ovakvog tipa.
Na MSSQL resenje za Top X vrednosti bi bilo otvaranje cursora nad tabelom Odelenja , a zatim uparivati Top x konstrukcije sa Id om Odeljenja u petlji.

Pozdrav
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Uslovljavanje select-a po skupu uredjenih parova?15.11.2005. u 15:29 - pre 223 meseci
Citat:
Zanima me, kako bi ti sutradan modifikovao tvoj query (ako se poslodavac , recimo predomisli) , da ti prikazuje tacno 4 radnika po odredjenom odeljenju , sa najvecom platom-- u tome i jeste poenta mog pristupa.


Pa, tvoj i moj kveri daju odgovor na dva razlicita pitanja i nemoguce je modifikovati bilo koji od nijh tako da daje rezultat kao onaj drugi. Ako je i moguce, nema mnogo smisla, ponavljam, oni daju odgovor na razlicita pitanja. Ako se poslodavac predomisli, pa toliko promeni pitanje, dobice novi kveri. Da li ce on to i da plati, to je vec van ove diskusije.

Slusaj, ne pokusavam da kazem da je bilo koji od dva kverija bolji od drugoga. Sve zavisi kako je pitanje postavljeno i kako je shvaceno. Originalno pitanje je postavljeno tako da se moze shvatiti i na jedan i na drugi nacin. Verovatno da bi pravi odgovor gazdi u ovoj situaciji bio: "ako hoces tacno jednog radnika po odeljenju, uzmi kveri tipa 'branimir.ts', a ako hoces sve radnike, uzmi kveri tipa 'zidar'. ako hoces oba odgovora, trebace ti oba kverija". I ti i ja smo pogresili sto smo nedovoljno artikulisano pitanje shvatili na nacin koji nam se dopao.

:-)
 
Odgovor na temu

[es] :: Baze podataka :: Uslovljavanje select-a po skupu uredjenih parova?

[ Pregleda: 4307 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.