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

Zanimljiv problem iz SQL-a koji ne uspevam da resim

[es] :: Baze podataka :: Zanimljiv problem iz SQL-a koji ne uspevam da resim

Strane: 1 2

[ Pregleda: 7746 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim27.12.2005. u 13:40 - pre 223 meseci
Citat:
jablan:Je l' si se ti setio ovog ili si negde pokupio fazon?


Nije ti to fazon, vec nacin ispravnog pristupa postavljenom problemu. Ako zadatke ovakvog tipa pokusavas da resis nekakvim grupisanjem i koriscenjem agregatnih funkcija, znaj da je tvoj nacin razmisljanja pogresan.

Pozdrav

 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim27.12.2005. u 13:56 - pre 223 meseci
Citat:
branimir.ts: Nije ti to fazon, vec nacin ispravnog pristupa postavljenom problemu. Ako zadatke ovakvog tipa pokusavas da resis nekakvim grupisanjem i koriscenjem agregatnih funkcija, znaj da je tvoj nacin razmisljanja pogresan.

Pozdrav


Opasna generalizacija, molim te uzdrži se ovakvih komentara, i nisi baš neki utisak ostavio svojim "rešenjem".
Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim27.12.2005. u 14:10 - pre 223 meseci
Citat:
CandyMan: Opasna generalizacija, molim te uzdrži se ovakvih komentara, i nisi baš neki utisak ostavio svojim "rešenjem".


Resenje je resenje i sluzi za resavanje, a ne za ostavljanje utisaka.

Sem toga sto je tvoj query nezavistan od SQL sistema na kom se izvrsava, ne vidim ni jednu jedinu prednost nad mojom SQL konstrukcijom. Cak ce tvoj query sporije raditi nad relativno velikim tabelama.

Pozdrav
 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim27.12.2005. u 15:08 - pre 223 meseci
Hteo ti ili ne, samim tim što si se javio na forumu, ostavljaš nekakav utisak. Definitivno je jasno da si tvrdoglav, a to što želiš po svaku cenu da nametneš svoje rešenje je neukusno. Tvoja "SQL konstrukcija" je proizvod minimalnog vremena provedenog u razmišljanju, što bi moglo da se protumači kao uvreda čitalaca foruma, pošto nisi uložio više truda da sagledaš i rešiš problem. Nemam ništa protiv da ovo što sam ja napravio zoveš upitom, ali to što si ti svoj proizvod nazvao konstrukcijom opet govori o (samo)kritičkoj atmosferi u kojoj radiš. Konkretnije ne treba komentarisati.

Code:
(select top 1  obj FROM Tabela t where t.obj = tmp.obj order by [ID] desc) as [Obj]

Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim27.12.2005. u 15:30 - pre 223 meseci
Citat:
CandyMan: Tvoja "SQL konstrukcija" je proizvod minimalnog vremena provedenog u razmišljanju


Prvo, ja ne namecem nikome svoje resenje kao konacno i definitvno.

Naravno da je vreme veoma bitno u savremenom IT svetu. A koliko vidim ti non stop ponavljas jedan te isti query u razlicitim kontekstima , pa covek ima utisak da nisi dalje odmakao od te 1996 godine kada si prvi put upamtio smisleni zadatak tadasnjeg profesora. Ko zna, mozda ti je toliko i trebalo od tad pa do danas da shvatis sta su correlated subqueries, i zasto tvoj query vraca one rezultate koje zaista vraca.

Vec sam ti rekao da je tvoja konstrukcija duplo sporija od one koju sam ja predstavio, to su cinjenice.

A ono sto si pomenuo da ce sporije raditi na tabelama sa par hiljada redova, tada si me zaista slatko nasmejao.

Posto vidim da analiziras moju SQL konstrukciju bez ikakvog komentara, ja cu malo baciti pogled na delove tvog SQL koda.

Citat:

CandyMan
Prvo predavanje predmeta "Strukture i baze podataka", profesor dr Veljko Malbaša, 1996. godina, pitanje za sve studente:
"Iz tabele sa radnicima i platama, izlistati podatke za prvu trojicu sa najvećom platom."
Kada se malo preformuliše dobije se:
"Izlistaj sve one koji po plati iznad sebe imaju manje od tri coveka - nijednog, jednog ili dva čoveka".


Profesor je sasvim jasno postavio pitanje, zasto si ga dodatno preformulisao?

Citat:

Rešenje:
Code:

select radnik, plata
  from radnik r
 where 3 > (select count(*)
              from radnik r2
             where r2.plata > r.plata)
order by 1,2



Kada si ga vec preformulisao na komplikovaniji nacin, tj izlistaj sve one koji po plati iznad sebe imaju manje od tri coveka, zasto nisi kao uslov postavio

Code:
where
           (select count(*)
              from radnik r2
             where r2.plata > r.plata) < 3 


vec

Code:
where 3 > (uslov)


ovo ?

Dalje, zasto si u ORDER klauzuli postavio redne brojeve kolona a ne njihove nazive?

I na kraju, zanimalo bi me kako bi postojeci query modifikovao tako da vraca tacno poslednja 2 pojavljivanja Obj, ali sa dodatnim uslovom da se Obj pojavio u tabeli najmanje 2 puta ?



Pozdrav


[Ovu poruku je menjao branimir.ts dana 28.12.2005. u 11:55 GMT+1]
 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim29.12.2005. u 10:26 - pre 223 meseci
Ovako...
Citat:
Profesor je sasvim jasno postavio pitanje, zasto si ga dodatno preformulisao?

Pitanje sam PREFORMULISAO što znači da nisam promenio smisao nego formu, oblik u cilju jasnijeg predstavljanja puta kojim se došlo do rešenja.
Citat:
where 3 > (uslov)

Ne vidim u čemu je problem - a > b je isto što i b < a

Citat:
zasto si u ORDER klauzuli postavio redne brojeve kolona a ne njihove nazive?

Kada pišeš mnogo upita u toku dana jasno je da određene stvari želiš da skratiš koliko je moguće - ORACLE dozvoljava da se kolone u ORDER BY referenciraju i po rednom broju osim po imenu. Mislim da su svi shvatili šta je pisac hteo da kaže.

Citat:
I na kraju, zanimalo bi me kako bi postojeci query modifikovao tako da vraca tacno poslednja 2 pojavljivanja Obj, ali sa dodatnim uslovom da se Obj pojavio u tabeli najmanje 2 puta ?

Vrlo rado.
U tabelu sam dodao jos jedan slog obj_id = 4 i id = 13, tako da obj_id 4 ima samo jedno pojavljivanje, svi ostali ispunjavaju uslov koji si postavio.

Code:

SQL> select * from test;

        ID     OBJ_ID
---------- ----------
         1          1
         2          2
         3          3
         4          3
         5          3
         6          1
         7          2
         8          2
         9          3
        10          3
        11          1
        12          1
        13          4

13 rows selected.

Stari upit
Code:

SQL> SELECT obj_id, id
       FROM test e
      WHERE 2 > (select count(*)
                   from test e2
                  where e2.id > e.id
                    and e2.obj_id=e.obj_id)
      ORDER BY obj_id, id desc;

    OBJ_ID         ID
---------- ----------
         1         12
         1         11
         2          8
         2          7
         3         10
         3          9
         4         13

7 rows selected.

Novi upit - svi koji imaju najmanje dva pojavljivanja
Code:

SQL> SELECT obj_id, id
       FROM test e
      WHERE 2 > (select count(*)
                     from test e2
                    where e2.id > e.id
                      and e2.obj_id=e.obj_id)
        AND obj_id in (select obj_id
                         from test
                        group by obj_id
                       having count(*) >= 2)
      ORDER BY obj_id, id desc;

    OBJ_ID         ID
---------- ----------
         1         12
         1         11
         2          8
         2          7
         3         10
         3          9

6 rows selected.


Naravno, voleo bih da vidim i tvoje rešenje, uz objašnjenje.

[Ovu poruku je menjao CandyMan dana 29.12.2005. u 11:27 GMT+1]
Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim29.12.2005. u 10:56 - pre 223 meseci
Citat:
CandyMan: Ovako...
Novi upit - svi koji imaju najmanje dva pojavljivanja
Code:

....AND obj_id in (select obj_id
                         from test
                        group by obj_id
                       having count(*) >= 2)
      ORDER BY obj_id, id desc;

    OBJ_ID         ID
---------- ----------
         1         12
         1         11
         2          8
         2          7
         3         10
         3          9

6 rows selected.

Naravno, voleo bih da vidim i tvoje rešenje, uz objašnjenje.


Jao, opet ti sa grupisanjem... A ja taman pomislio da razmisljas na pravi nacin.

Evo prvo izmene tvog SQL coda...

Dakle, svi koji imaju najmanje dva pojavljivanja ....
Code:

select  [obj], id
from test AS e
where
 (select count(*)  from test e2  where e2.id > e.id   and e2.obj=e.obj) < 2
]and 
(select count(*)  from test e3  where e3.obj=e.obj) >=2
order by obj, [id] DESC;


Nije mi jasno zasto nisi nastavio da razmisljas kako treba, vec si se "zapetljao sa grupisanjem"

Evo i moje izmenjene verzije koda:

Code:

SELECT t.id, t.obj
FROM test AS t
WHERE t.[id]  in  
 (select top 2 tmp.[id] from test as tmp where tmp.obj=t.obj order by  tmp.[id] desc )
and 
(select count(*) from test tmp where tmp.obj = t.obj ) >=2
ORDER BY obj, [id];


Bez obzira na sve, mislim da si daleko bolji SQL programer od vecine koji ovde dolaze na forum , i zelim da ti se ujedno zahvalim na ponudjenom odgovoru.

Ne znam ima li potrebe da komentarisem izmene koje su postavljene, prepostavljam da su ocigledne?

Pozdrav

[Ovu poruku je menjao branimir.ts dana 29.12.2005. u 11:57 GMT+1]

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

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim29.12.2005. u 15:08 - pre 223 meseci
Evo još jednog rešenja, bez restrikcije na najmanje dva pojavljivanja
Code:

SQL> select test.obj_id, max(test.id) as id
       from test ,
            (select max(a.id) as maxofid,
                    a.obj_id
               from test a
              group by a.obj_id )  q1
      where test.id = q1.maxofid    (+)
        and test.obj_id = q1.obj_id (+)
      group by test.obj_id, q1.maxofid
      order by test.obj_id, max(test.id) desc;

    OBJ_ID         ID
---------- ----------
         1         12
         1         11
         2          8
         2          7
         3         10
         3          9
         4         13


/* Ver 2 */


select test.obj_id, max(test.id) as id
  from test left join (select max(test.id) as maxofid, 
                              test.obj_id
                         from test
                        group by test.obj_id )  qryTestMaxOfId 
               on (test.id = qrytestmaxofid.maxofid) and (test.obj_id = qrytestmaxofid.obj_id)
group by test.obj_id, qrytestmaxofid.maxofid
order by test.obj_id, max(test.id) desc

    OBJ_ID         ID
---------- ----------
         1         12
         1         11
         2          8
         2          7
         3         10
         3          9
         4         13


Nije mi jasno šta ti imaš protiv grupisanja!? GROUP BY postoji u ANSI SQL-u i svim mogućim implementacijama SQL-a!

Nego, Mr Correlated SubQueries, napiši neko rešenje bez TOP klauzule...

Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Zanimljiv problem iz SQL-a koji ne uspevam da resim09.01.2006. u 08:38 - pre 222 meseci
@branimir.ts: Sam si rekao da neko napise SQL upit da je neovisan o RDBMS-u, a ti uporno koristis TOP iako nije podrzan kod svih RDBMS-a. Osim toga, i taj TOP interno u RDBMS-u radi GRUPISANJE, jer zeljeni rezultat jednostavno NE MOZES dobiti bez grupisanja...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

[es] :: Baze podataka :: Zanimljiv problem iz SQL-a koji ne uspevam da resim

Strane: 1 2

[ Pregleda: 7746 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

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