» »

SQL poizvedba

SQL poizvedba

piki12 ::

Lep pozdravček vsem,
zanima me kako bi naredil naslednjo poizvedbo v sql pouščite pare šifer tistih jadralcev, ki so doslej že rezervirali isti čoln. V rezultatu naj ne bo pomensko odvečnih vrstic!

Izvleček iz baze:
Jadralec(jid, ime, rating, starost)
Coln(cid, ime, dolzina, barva)
Rezervacija(jid, cid, dan)


Moja rešitev:
select distinct c1.jid,c2.jid from rezervacija c1,rezervacija c2 
 where c1.cid=c2.cid and c1.jid<>c2.jid
;

Izpiše navadno recimo nekako takole:
21 31
21 65
31 21
Se pravi pomensko nepravilne vrstice. Mogoče kakšna ideja kako to odpravim

detroit ::

Mogoče hint: ne razumem nič:)
Skero

piki12 ::

Ne razumem kaj za hudiča hoče naloga od mene če sme prav naredil ..

mile ::

SELECT c1.dan,c1.cid,c1.jid,c2.jid 
FROM rezervacija c1,rezervacija c2 
WHERE c1.cid=c2.cid AND c1.jid<>c2.jid AND c1.dan=c2.dan
GROUP BY c1.dan,c1.cid

eXoo ::

Si bom kar sposodil to temo.

Imam dve tabeli:

Gledalec: id_gledalec, ime, priimek...;
Udelezba: id_udelezba, tk_id_gledalec;

Izpisal bi rad, kateri gledalec je imel največ udeležb (se je največkrat udeležil tekem).

Ideja je bila naslednja :

SELECT Gledalec.ime,
  (SELECT COUNT(*) 
   FROM Udelezba
   WHERE id_gledalec = tk_id_gledalec) AS urejeno
FROM Gledalec
ORDER BY urejeno DESC;


Problem pa je naslednji. Rad bi izpisal samo prvega. Poskušal sem uporabiti
WHERE ROWNUM = 1;
vendar tega ne morem dodati na konec kode, ker mi javi napako. Se pravi, da mora biti nekje pred
ORDER BY
kar pa postane problem, ker tabela takrat še ni urejena. Uporabljam Oracle SQL Developer. Pa jasno mi ni tudi to, zakaj ne dela
LIMIT
namreč
LIMIT
je mogoče dodati za
ORDER BY
če se ne motim.

Hvala za pomoč.

LP.

Zgodovina sprememb…

  • spremenil: eXoo ()

Roadkill ::

SELECT TOP 1 ?
Ü

Isotropic ::

(SELECT COUNT(*)
nebi tega count * malo spremenil? v count(1) mogoce?

Tody ::

Ja moreš se odločit kaj boš štel :) * pride v poštev ko hočeš vedit koliko je vrstic. Drugače pa count daš v zgornji query. Torej najprej urediš svoje gledalce, torej kdo je bil kdaj na kaki tekmi. Podtem pa ta query naj rata subquery in zgoraj prešteješ udeležbe, ime gledalca pa naj pristane tudi v group by

MrStein ::

Isotropic je izjavil:

(SELECT COUNT(*)
nebi tega count * malo spremenil? v count(1) mogoce?

count(1) in count (*) sta identična. (za Oracle)
Go on , try it. ;)

eXoo je izjavil:

Si bom kar sposodil to temo.

Imam dve tabeli:

Gledalec: id_gledalec, ime, priimek...;
Udelezba: id_udelezba, tk_id_gledalec;

Izpisal bi rad, kateri gledalec je imel največ udeležb (se je največkrat udeležil tekem).

Ideja je bila naslednja :


SELECT Gledalec.ime,
(SELECT COUNT(*)
FROM Udelezba
WHERE id_gledalec = tk_id_gledalec) AS urejeno
FROM Gledalec
ORDER BY urejeno DESC;


Problem pa je naslednji. Rad bi izpisal samo prvega.
LP.


SELECT * FROM
(SELECT Gledalec.ime,
  (SELECT COUNT(*) 
   FROM Udelezba
   WHERE id_gledalec = tk_id_gledalec) AS urejeno
FROM Gledalec
ORDER BY urejeno DESC)
WHERE ROWNUM=1;
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

MrStein ::

MrStein je izjavil:

Isotropic je izjavil:

(SELECT COUNT(*)
nebi tega count * malo spremenil? v count(1) mogoce?

count(1) in count (*) sta identična. (za Oracle)

"What is the difference between count(1) and count(*) in a sql query"
"nothing" - Tom Kyte
vir: http://asktom.oracle.com/pls/asktom/f?p...

(tudi v drugih DBMS sta identična: http://stackoverflow.com/questions/1484... )
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

lebdim ::

mora ratat s tole funkcijo count

kaj pa Gledalec.priimek? zakaj bi te zanimalo samo ime?

Zgodovina sprememb…

  • spremenil: lebdim ()

eXoo ::

Sem že rešil, tako da se zahvaljujem.

SELECT Gledalec.ime,Gledalec.priimek,stevilo_izletov FROM
    (SELECT Gledalec.ime,Gledalec.priimek, COUNT(Udelezba.tk_id_Gledalec) AS stevilo_izletov
    FROM Gledalec,Udelezba
    WHERE Gledalec.id_Gledalec = Udelezba.tk_id_Gledalec
    GROUP BY Gledalec.ime, Gledalec.Priimek
    ORDER BY stevilo_izletov DESC) Gledalec
WHERE ROWNUM = 1;

awy ::

Mene pa zanima kako bi lahko glede na obstoječo bazo od zgoraj:

Jadralec(jid, ime, rating, starost)
Coln(cid, ime, dolzina, barva, relatDolz)
Rezervacija(jid, cid, dan)

izračunali relativno dolžino čolna po formuli: relatDolz=dolzina trenutnega colna/povprecna dolzina vseh colnov v tabeli.

black ice ::

Lahko uporabiš view.

awy ::

Kaj pa brez viewa?

urosz ::

awy je izjavil:

Mene pa zanima kako bi lahko glede na obstoječo bazo od zgoraj:

Jadralec(jid, ime, rating, starost)
Coln(cid, ime, dolzina, barva, relatDolz)
Rezervacija(jid, cid, dan)

izračunali relativno dolžino čolna po formuli: relatDolz=dolzina trenutnega colna/povprecna dolzina vseh colnov v tabeli.


SELECT dolzina/(SELECT AVG(dolzina) FROM Coln) as relatDolz FROM Coln;

awy ::

Hvala, sploh mi ni kapnilo, da lahko gnezdiš v select stavku :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL vprašanje

Oddelek: Programiranje
81028 (627) MrStein
»

MySQL group by

Oddelek: Programiranje
5916 (744) vorantz
»

MySQL procenti

Oddelek: Programiranje
91084 (750) Malik12
»

MySQL pomoc

Oddelek: Izdelava spletišč
171717 (973) slosi
»

MYSQL vprašanje

Oddelek: Programiranje
131647 (1262) MrBrdo

Več podobnih tem