Pomoc so selectom (oracle db)

Programovacie jazyky, rady, poradňa...
Luk1
Light Expert
Light Expert
Príspevky: 55
Registrovaný: 13 dec 2008, 15:35
Kontaktovať používateľa:

Pomoc so selectom (oracle db)

Príspevok od používateľa Luk1 »

Caute, mozno ide o jednoduchu vec, ale neviem nejak nato dojst...
mam tabulku
create table nehnutelnost (
id_nehnutelnosti NUMBER(9) primary key,
typ VARCHAR(10) not null,
ulica VARCHAR(30) not null,
mesto VARCHAR(30) not null,
realna_cena NUMBER(9) not null,
mestska_cast VARCHAR(30) not null,
psc VARCHAR(6) not null,
check (typ in ('kanc','ob_dom','byt','garaz','zahrada')),
check (realna_cena >0)
);
ta mestska cast nadobu len hodnoty Kosice-Sever, Kosice-IV, Kosice-Stare Mesto a ja potrebujem pre kazdu tuto mestsku cast vypisat nehnutelnost s najvyssou realnou cenou a k tomu vypisat jej ulicu typ psc mesto a id

Skusal som nieco take SELECT max(realna_cena),mestska_cast,ulica,typ,psc,id_nehnutelnosti FROM nehnutelnost GROUP BY mestska_cast; ale toto nejde ( not a GROUP BY expression, ale v mysql to ide :/)
Dik za kazdu radu
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

jasne, ze nemozes vypisat vsetky tie atributy ked grpujes iba podla mestskej casti, ako chces ziskat napr. ID kazdej jednej nehnutelnosti ak to mas grupnute?
musis odtial bud vyhodit vsetko podla coho sa negrupuje, ale dat tych vyrazo GROUP BY viac
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa audiotrack »

no s oraclom nemám moc skúseností, ale nevyriešil by to rollback?
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

rollback by urcite nicomu nepomohol tak ako by nicomu nepomohol commit

problem jeho SELECTu je v tom, ze ma data napr. taketo

budova1 Kosice-Sever
budova2 Kosice-Sever

Budova3 KosiceIV
BUdova4 KosiceIV

ak da group podla toho druheho atributu tak databaza chce vypisat jednak vsetky 4 ID a jednak urobit GROUP co nie je mozne a navyse tam robi aj ten MAX co je agregovana funkcia. to sa proste neda miesat dohromady
Luk1
Light Expert
Light Expert
Príspevky: 55
Registrovaný: 13 dec 2008, 15:35
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa Luk1 »

no uloha je

Kód: Vybrať všetko

pre každú lokalitu nájdite najdrahšiu nehnuteľnosť. Vo výpise uveďte – názov lokality, id nehnuteľnost, adresu nehnuteľnosti a cenu
no ja som myslel, ze ak vypisem maximalne ceny nehnutelnosti z danych lokalit tak mozem si vypisat aj id,adresu tej nehn. s max cenou
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa javatar »

nemam poruke oracle databazu ale cosi sa mi mari zeby si mohol skusit toto:

SELECT ulica,typ,psc,id_nehnutelnosti FROM nehnutelnost GROUP BY mestska_cast HAVING MAX(realna_cena);
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

nenapada ma nic ine ako pouzit 2 SELECTy (pripadne vnoreny SELECT)

Kód: Vybrať všetko

SELECT realna_cena,mestska_cast,ulica,typ,psc,id_nehnutelnosti FROM nehnutelnost 
WHERE realna_cena IN (SELECT MAX(realna_cena) FROM nehnutelnost GROUP BY mestska_cast);
javatar napísal:nemam poruke oracle databazu ale cosi sa mi mari zeby si mohol skusit toto:

SELECT ulica,typ,psc,id_nehnutelnosti FROM nehnutelnost GROUP BY mestska_cast HAVING MAX(realna_cena);
HAVING je podmienka pre skupinu napr.

Kód: Vybrať všetko

SELECT kat,funkce,COUNT(*),AVG(plat)
FROM Zam
GROUP BY kat,funkce
HAVING COUNT(*)>25;
stale by Ti tam zostal problem, ze chces pracovat s agregovanymi a neagregovanymi datami naraz
Luk1
Light Expert
Light Expert
Príspevky: 55
Registrovaný: 13 dec 2008, 15:35
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa Luk1 »

dik kamo, ten vnoreny select funguje presne ako to potrebujem, skusal som to nejak podobne aj sam ale stale som to chcel riesit cez id_nehnutelnosti a neslo....

este raz dik :)
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa c-ice »

Kód: Vybrať všetko

SELECT realna_cena, DISTINCT mestska_cast, ulica,typ, psc,id_nehnutelnosti FROM nehnutelnost ORDER BY realna_cena DESC
a toto ??? ak to nefunguje vyhod DISTINCT a nahod GROUP BY
axxis:
BTW. co ak cena je rovnaka v casti 1 a casti 2 ale v casti 2 existuje aj vysia .. takto ti vypise obe takze to nemas dobre ...
chyba ti tam previazanie .... najlepsie na nieco unikatne ... nie na cenu ktoru tam mozes mat 10krat

Pokial nepracuješ z funkcionalitou danej platformy MSSQL Oracle MYSQL tak to je celkom jedno v com robis ... Nativne SQL by malo ist "vsade rovnako"
nebolo by to jedno keby chces nejaku Function spravit alebo StoredProcedure ...
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

c-ice napísal:

Kód: Vybrať všetko

SELECT realna_cena, DISTINCT mestska_cast, ulica,typ, psc,id_nehnutelnosti FROM nehnutelnost ORDER BY realna_cena DESC
a toto ??? ak to nefunguje vyhod DISTINCT a nahod GROUP BY
axxis:
BTW. co ak cena je rovnaka v casti 1 a casti 2 ale v casti 2 existuje aj vysia .. takto ti vypise obe takze to nemas dobre ...
chyba ti tam previazanie .... najlepsie na nieco unikatne ... nie na cenu ktoru tam mozes mat 10krat
priznam sa Ti, ze ten Tvoj select nechapem. Nielenze nefunguje ( ORA-00936: chýba výraz) ale je cudny uplne cely. Distinct sa pouziva aby si ziskal unikatne riadky a nie aby si si zunikatnil jeden atribut. a za druhe nechapem naco robis to ORDER BY a navyse v otocenom poradi? Vidis niekde v zadani, ze to ma usporiadat od najlacnejsieho po najdrahsie? A ked vyhodi ten DISTINCT a miesto neho pouzije GROUP BY tak to mu to nebude fungovat koli agregacii.
Spoiler
btw. uplna syntax prikazu SELECT vyzera takto a klucove slova si nemozes pchat len tak kam chces ako to robis Ty

Kód: Vybrať všetko

SELECT{ALL|DISTINCT}{seznam_výrazů|*}
FROM tab [tabnázev][,...]
[WHERE podm]
[GROUPBY seznam_sloupců
[HAVING podm]]
[ORDERBY atr1[ASC|DESC][,atr2...]]
Mas ale pravdu v tom, ze moj SELECT je nespravny z dovodu, ktory uvadzas. Ak sa mi bude chciet porozmyslam nad tym ako to upravit. (teraz mam vypite tak mi to moc nejde :) )
c-ice napísal: Pokial nepracuješ z funkcionalitou danej platformy MSSQL Oracle MYSQL tak to je celkom jedno v com robis ... Nativne SQL by malo ist "vsade rovnako"
nebolo by to jedno keby chces nejaku Function spravit alebo StoredProcedure ...
podla toho co napisal tak to ocividne rovnako nefunguje :roll:
ja sa priznam, ze s MySQL som jakziv nepracoval. Iba s Oraclom a MSSQL a to co napisal na zaciatku je z pohladu serverov, s ktorymi mam skusenosti nepsracovatelne
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa c-ice »

:D citaj co pisem ... nenapisal som nahrad ale nahod ... ja viem syntax :) asi keby tu syntax neovladam tak tu nepisem o pisani funkcii a storovanych procedur ... mozno si sa k takemu niecomu este ani nedostal :)

myslienka mojho selectu bola taka ze ... zoradis to cele podla ceny od najdrahsieho ... a z tohoto zoradeneho zoberes vzdy iba prvy najdeny riadok to som chcel docielit Distinctom (prvy najdeny z inou hodnotou v mestska_cast tak by mal fungovat DISTINCT ) sam som to nikde neskusal takze netusim co to malo spravit ...
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

syntax ocividne nepozas ked dosadzujes DISTINCT niekde do stredu vyctu stlpcov, ktore maju byt vybrane :?
a okrem toho DISTINCT vie urobit unikatne riadky, rozhodne to neodlisi prvy rozdielny riadok od ostatnych, ak by si chcel silou mocou vybrat prvy riadok tak musis puzit ROWNUM. (zlate MSSQL, ktore vie vyberat prvych X riadkov)
a nie, este som sa nestretol s PL/SQL :lol:
inac ak mam byt uprimny prve co ma napadlo bolo otvorit si kurzor unikatnych mestskych casti a pre kazdu jednu vklude potom najst polozku s maximalnou realnou cenou, bohuzial si nemyslim, ze PL/SQL je to co by chcel
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa c-ice »

OK to distinct nepouzivam moc casto ... mozno to ma byt hned za select niesom zas chodiaci "compiler" len to kam patri GROUP je asi celkom jasne ... zeto nebude namiesto toho ...
PL-SQL a T-SQL nepozna väčšina spoluziakov 3.ročnik Bc resp. ani nevedia čo to je ... tak preto som sudil ze mozno si sa stym ani nestretol :) nepoznam ta len tak ako kopu ludi toto nepozna tak bola vysoka sanca ze ani ty to nepoznas ...

ale myslim ze myslienka toho ako to som chcel dosiahnut bola dobra ...
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

c-ice: na aku skolu chodis? do nas na skole PL/SQL pchali obrovskym stylom aby sme to vedeli pisat odpredu dozadu (dokonca je vseobecne tradovane, ze pisomka z neho je to najhorsie co Ta moze na mojej skole stretnut + ak si ju napisal este sa aj pisal projekt v Jave alebo c#, ktory musel volat minimalne 5 ulozenych procedur + nejake triggre)
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa c-ice »

STU Fei ... aplikovana informatika ... Databazove Systémy su v 3. semester Bc studium ... Pouziva sa Oracle ale su to take zaklady ... k tomuto sme sa nedostali ... a islo sa podla nejakeho ako Oracle University tam sme mali konta a vsetky materiály z toho...

to na vas prve co spravili bez zakladov zacali sypat PL-SQL ? kam chodis ? tu su pokial viem databazy iba tento jeden semester mozno nieco je aj v Ing
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

Oracle academy som robil aj ja, prvy kurz bol uplne udesny (konceptualne navrhy)
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa c-ice »

presne to... navrhovali sme ... to sme mali aj semestralku taku kazdy ine zadanie... a vsetky tie formy spravit ... popisat vsetko a tak ...

ty si ktomu mal blizsie...

Kód: Vybrať všetko

SELECT cast, mesto, psc, ulica, cena, id
FROM nehnutelnosti n
WHERE 
cena IN (SELECT MAX(CENA) FROM nehnutelnosti WHERE n.cast = cast)
spravil som si tabulku v MySQL a otestoval preto sa volaju trocha inak tie stlpce umna hadam sa to da prelozit do jeho nazvov :)
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa axxis »

hej mas to dobre :)
priznam sa, ze ma nenapadlo si hentak odlisit tabulku v tych dvoch selectoch. nevdel som ako do podmienky WHERE dostat spravnu mestsku cast
(teraz ked to vidim ake je to jasne :) )

inak jednu kozmeticku upravu by som si dovolil, urobi ten select zrozumitelnejsim

Kód: Vybrať všetko

SELECT cast, mesto, psc, ulica, cena, id
FROM nehnutelnosti n
WHERE 
cena = (SELECT MAX(CENA) FROM nehnutelnosti WHERE n.cast = cast GRUOP BY cast)
(group by znacne zrychli kod, zabrani tvoreniu mohutneho kartezskeho sucinu)
Luk1
Light Expert
Light Expert
Príspevky: 55
Registrovaný: 13 dec 2008, 15:35
Kontaktovať používateľa:

Re: Pomoc so selectom (oracle db)

Príspevok od používateľa Luk1 »

Este by som potreboval skontrolovat tento zapis v relacnej algebre selectu ktory mi napisal axxis.

Kód: Vybrať všetko

SELECT realna_cena,mestska_cast,ulica,typ,psc,id_nehnutelnosti,mesto FROM nehnutelnost
WHERE realna_cena IN (SELECT MAX(realna_cena) FROM nehnutelnost GROUP BY mestska_cast);

Kód: Vybrať všetko

L:=PI max(realna_cena) GAMMA mestska_cast (SIGMA(nehnutelnost))
PI realna_cena,mestska_cast,ulica,typ,psc,id_nehnutelnosti,mesto FI realna_cena IN L (nehnutelnost)
a este tento

Kód: Vybrať všetko

SELECT mestska_cast,n.id_nehnutelnosti,typ,mesto,ulica,psc,cena,realna_cena as "Realna cena" FROM nehnutelnost n,transakcia t WHERE t.id_nehnutelnosti=n.id_nehnutelnosti ORDER BY mestska_cast;

Kód: Vybrať všetko

L :=PI mestska_cast,id_nehnutelnosti,typ,mesto,ulica,psc,realna_cena SIGMA(nehnutelnost x transakcia)
	T mestska_cast (L)
DIK (dufam, ze to ma aspon zmysel co som vytvoril, kedze moc nemam potuchy o tom a vela som toho ani nevygooglil)
Napísať odpoveď