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

SQL upiti - Molim pomoć

[es] :: Baze podataka :: SQL upiti - Molim pomoć

[ Pregleda: 3255 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rhanival
Romana Hanivale
student
UNIST
Split, Hrvatska

Član broj: 330415
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon SQL upiti - Molim pomoć01.09.2015. u 22:37 - pre 104 meseci
Molim pomoć oko ovih zadataka... Rješavala sam, ali nisam sigurna da sam dobro riješila. Prvi zadatak možda radi, a drugi ne rade najbolje, najteži je četvrti zadatak. Svaka pomoć je dobro došla! Hvala.

Tablice:
ORG (SIFRA_ORG, NAZIV_ORG, ADRESA)
PUT (SIFRA_PUT, SIFRA_ORG, POLAZISTE, ODREDISTE, PRIJEVOZ, TRAJANJE, CIJENA, PRETHODI)

1. Za svako polazište iz Zagreba prikazati odredište, vrstu prijevoza i naziv organizatora.

SELECT p.odrediste, p.prijevoz, o.naziv_org
FROM org AS o INNER JOIN put AS p
ON o.sifra_org=p.sifra_org
WHERE p.polaziste='Zagreb'

2. Prikazati sve podatke o organizatorima koji imaju barem 3 putovanja koja traju duže od 2 noćenja.

SELECT o.*, COUNT (o.naziv_org) AS broj_putovanja
FROM org AS o INNER JOIN put AS p
ON o.sifra_org=p.sifra_org
WHERE p.trajanje >2
GROUP BY o.naziv_org
HAVING broj_putovanja > 2

3. Koja putovanja su jeftinija od prosječne cijene putovanja po organizatoru?

SELECT p.*
FROM org AS o INNER JOIN put AS p
ON o.sifra_org=p.sifra_org
WHERE p.cijena < (SELECT AVG (p.cijena)
FROM org AS o INNER JOIN put AS p
ON o.sifra_org=p.sifra_org)

4. Prikazati odredište i cijenu svakog putovanja, kao i odredište i cijenu putovanja koju mu neposredno prethodi, za putovanja koja su jeftinija od svojeg prethodnika.

SELECT p.odrediste, p.cijena cijena1, p.cijena cijena2, p.prethodi, p.prethodi
ON o.sifra_org=p.sifra_org
WHERE cijena1 < cijena2

5. Prikazati vrstu prijevoza, trajanje i cijenu za sva ona putovanja koja slijede nakon putovanja brodom u Veneciju.

SELECT p.prijevoz, p.trajanje, p.cijena
FROM put AS p
WHERE p.sifra_put > (SELECT p.sifra_put FROM put AS p
WHERE p.odrediste='Venecija'
AND p.prijevoz='brod')

6. Prikazati trajanje i cijenu onih putovanja koje organizira agencija Atlas, a skuplja su od prosječnog putovanja u Rim.

SELECT p.trajanje, p.cijena
FROM org AS o INNER JOIN put AS p
ON o.sifra_org=p.sifra_org
WHERE o.naziv_org='Atlas'
AND p.cijena > (SELECT AVG (p.cijena)
FROM put AS p
WHERE odrediste='Rim')
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: SQL upiti - Molim pomoć02.09.2015. u 08:57 - pre 104 meseci
Dumpuj ovde neki example dataset pa da se igramo.

http://sqlfiddle.com/
 
Odgovor na temu

rhanival
Romana Hanivale
student
UNIST
Split, Hrvatska

Član broj: 330415
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon Re: SQL upiti - Molim pomoć02.09.2015. u 18:16 - pre 104 meseci
Evo:
http://sqlfiddle.com/#!9/02568/1
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: SQL upiti - Molim pomoć02.09.2015. u 20:26 - pre 104 meseci
Šta tačno znači polje "prethodi"? Ako putovanja treba hronološki ređati, logičnije je da bude sat i minut polaska. U tom slučaju dva uzastopna polaska dobiješ trostrukim JOIN-om (npr t1, t2, t3), sa uslovom da t1 < t2 < t3 i da je t2 = NULL. To znači da t1 neposredno prethodi t3 (ne postoji nijedan polazak između).
 
Odgovor na temu

rhanival
Romana Hanivale
student
UNIST
Split, Hrvatska

Član broj: 330415
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon Re: SQL upiti - Molim pomoć02.09.2015. u 21:44 - pre 104 meseci
Može biti da je tako, ovo je slikano sa jednoga ispita... na žalost, zadnji dio tablice se ne vidi pa sam to sama nadodala kako sam mislila da ide, očito je krivo... A što je s ovim drugim SQL upitima? Ne mogu vjerovati da niti jedan ne valja osim ovoga prvoga? Barem da 2 ili 3 budu točna.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: SQL upiti - Molim pomoć03.09.2015. u 20:08 - pre 104 meseci
Mrzim ovu sintaksu sa "INNER JOIN", ali ako su vas tako učili onda ti tako pravi upite. Ali ta sintaksa je i uzrok što ti ne rade neki upiti, recimo onaj pod 2.

1.
Code (sql):

SELECT p.odrediste, p.prijevoz, o.naziv_org
FROM put p, org o
WHERE p.sifra_org = o.sifra_org
AND p.polaziste='Zagreb'

ili sa INNER JOIN sintaksom

SELECT p.odrediste, p.prijevoz, o.naziv_org
FROM put p INNER JOIN org o
ON p.sifra_org = o.sifra_org
WHERE p.polaziste='Zagreb'
 


greška u rešenju drugog zadatka je zato što se onaj WHERE, GROUP BY i HAVING odnosi na ceo upit a ne na ono što je posle join. Dakle,

2.
Code (sql):

SELECT o.*
FROM org AS o INNER JOIN (
   SELECT sifra_org, COUNT(*)
   FROM  put
   WHERE trajanje >2
   GROUP BY sifra_org
   HAVING COUNT(*) > 2 ) AS p
ON o.sifra_org=p.sifra_org
 


(u tvojim testnim podacima ni jedan organizator nema 3 putovanja)

3. Ovde si potpuno promašilia. Zašto radiš join org i put, kada ti org uopšte ne treba?
Mrzi me sada da pišem upite, probaj nešto da poraviš. Ako ne znaš odmah da napraviš ceo upit uradi parcijalno.

4. ovde si promašila čak i sintaksu. ovaj zadatak reši tako što ćeš da uradiš join tabele put sa samom sobom:
select ....
from put as p inner join put as prethodnik
on p.prethodi = prethodnik.sifra_put
....
Ovde nećeš dobiti nikakav rezultat, zato što nisi dobro prepisala polje prethodi u test podacima
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: SQL upiti - Molim pomoć30.09.2015. u 08:27 - pre 103 meseci
Polupismen sam za SQL, a treba mi nešto što izgleda prosto.
Imam jednu tabelu sa logovima. I tu jedno polje action ima razne vrednosti, a mene interesuje kada je polje loggedin i kada je loggedout. A svaki red ima i userid.
Hteo bih da prebrojim koliko se uz svaki userid pojavljuje loggedin, a koliko loggedout, ali to da mi bude u jednom izlazu. Dakle, kao COUNT, ali obe stvari da budu u istoj tabeli, npr da izlaz izgleda ovako:

userid----loggedin----loggedout
1-----------2-----------1
2-----------1-----------0
4----------12----------5

za svaki id da mi izbaci broj pojavljivanja vrednosti loggedin, ali odmah pored i loggedout.
Kao "dva uporedna count-a"
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: SQL upiti - Molim pomoć30.09.2015. u 08:34 - pre 103 meseci
maksvel, koja baza je u pitanju?
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: SQL upiti - Molim pomoć30.09.2015. u 08:37 - pre 103 meseci
mySQL
Vidi ovo, npr. jedan count bio bi ovo
SELECT userid, COUNT(action) FROM log WHERE action='loggedin' GROUP BY userid

i ja tu dobijem sve lepo - za jedan count, ali mi treba drugi, isti takav za loggedout, tj. da imam i još kolonu za rezultate tog drugog count-a.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: SQL upiti - Molim pomoć30.09.2015. u 08:43 - pre 103 meseci
Ne znam kako ide u MySql-u ali znam za MS Sql,
uglavnom umesto COUNT se koristi SUM kada je Action=Nesto, pa evo ti ideje:
Code:

SELECT
    SUM(CASE action WHEN 'loggedin' THEN 1 ELSE 0 END) AS LoginCount,
    SUM(CASE action WHEN 'loggedout' THEN 1 ELSE 0 END) AS LogoutCount
...


Vidim da MySql ima IF funkciju koja ti treba, sličan problem:
http://stackoverflow.com/a/14805910/461810

Dakle, ovako nekako za MySql:
Code:

SELECT
    userid,
    SUM(IF(action = 'loggedin', 1, 0)) AS LoginCount,
    SUM(IF(action = 'loggedout', 1, 0)) AS LogoutCount
FROM log
GROUP BY userid


 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: SQL upiti - Molim pomoć30.09.2015. u 08:52 - pre 103 meseci
Ok, isprobavao sam već nešto ovako, ali mi nije ispalo baš ok, probaću opet, možda sam nešto ispustio.
Ako baš ne uspe, idem kao i inače u životu - kvik end drti - dva upita, pa posle krljam po kodu. Dobro, nije baš kvik, ali drti stoji :)

Hvala

EDIT: OVO fercera izgleda sasvim ok. Dobićeš jedan lajk od mene!

Hvala2
 
Odgovor na temu

[es] :: Baze podataka :: SQL upiti - Molim pomoć

[ Pregleda: 3255 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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