- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- OpenWRT topic
- Alternatív kriptopénzek, altcoinok bányászata
- Eladatják a britek a kínai vállalattal a skót chipcéget
- Még ebben a hónapban megbüntetheti az EU az Apple-t
- Proxmox VE
- Microsoft Excel topic
- AliExpress tapasztalatok
- Linux kezdőknek
- ASUS routerek
Új hozzászólás Aktív témák
-
user112
senior tag
válasz Apollo17hu #4551 üzenetére
Tökéletes köszönöm.
-
vamzi
senior tag
Sziasztok,
Adott az alábbi adatbázis:
[kép]
Szeretném megkapni a legdrágább társasjátékok neveit. Az első fele megy, kitudom gyűjteni a legdrágább árakat:SELECT
tarsasjatek_id, MAX(ar)
FROM t_cikk
GROUP BY tarsasjatek_id
order by tarsasjatek_id;Viszont nem tudom hogy húzzam be a társasjátékok neveit ID alapján a t_tarsasjatek táblából.
Sejtem, hogy egy beágyazott select kell, de nem tudom összerakni a logikáját fejben
-
nyunyu
félisten
Aztán a sorbarendezéshez köré kell írni még egy selectet:
SELECT nev,
max_ar
FROM
(SELECT
y.nev,
MAX(ar) max_ar
FROM t_cikk x
INNER JOIN t_tarsasjatek y
ON x.tarsasjatek_id = y.id
GROUP BY y.nev) a
ORDER BY max_ar DESC;[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
vamzi
senior tag
Köszönöm szépen! -
vamzi
senior tag
Adatbázis ugyan az: [kép]
Feladat: Írjon egy SQL utasítást, amely kilistázza a vásárlók azonosítóját és nevét, valamint azt, hogy mennyit költött az adott vásárló társasjátékokra a vásárlásai során! Az összeg meghatározásakor a vásárlás vételárát és a vásárolt termékek darabszámát is vegye figyelembe!
Erre ez a megoldásom:
SELECT
vasarlo.id,
vasarlo.nev,
vasarlas.koltes_osszesen
FROM t_vasarlo vasarlo INNER JOIN ( SELECT
vasarlo_id,
sum(darab*vetelar) koltes_osszesen
FROM t_vasarlas
GROUP BY vasarlo_id) vasarlas
ON vasarlas.vasarlo_id = vasarlo.id;Ránézésre jó adatokat ad vissza a kérdésem inkább arra vonatkozna, hogy logikusan építettem fel a lekérdezést vagy van ennél kézenfekvőbb megoldás?
Köszönöm!
-
nyunyu
félisten
Alapvetően jó az elképzelés, de ezt lehet egyszerűbben is írni, mivel joinolt táblákat is tudsz szummázni:
SELECT
vasarlo.id,
vasarlo.nev,
sum(vasarlas.darab*vasarlas.vetelar) koltes_osszesen
FROM t_vasarlo vasarlo
INNER JOIN t_vasarlas vasarlas
ON vasarlas.vasarlo_id = vasarlo.id
GROUP BY vasarlo.id, vasarlo.nev;Hello IT! Have you tried turning it off and on again?
-
nyunyu
félisten
Jut eszembe, ezt is lehetne egyszerűbben írni:
SELECT
y.nev,
MAX(ar) max_ar
FROM t_cikk x
INNER JOIN t_tarsasjatek y
ON x.tarsasjatek_id = y.id
GROUP BY y.nev
ORDER BY MAX(ar) DESC;De amennyire emlékszem Oracle nem nagyon szokta szeretni, ha számolt oszlopokra próbál rendezni az ember, sokszor kaptam hasonló próbálkozásokra szintaktikai hibát, emiatt írtam inkább köré egy másik selectet a rendezéssel.
Más adatbáziskezelők rugalmasabbak ebben.
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
vamzi
senior tag
Sziasztok,
Adatbázis a régi: [kép]
Feladat szövege: Definiáljon egy olyan nézetet, amely kilistázza azoknak az áruházaknak a nevét, ahonnan a legtöbb fajta társasjátékot vásárolták!
Működő megoldásom:
CREATE OR REPLACE VIEW TOP_aruhazak AS
SELECT nev
FROM(
SELECT
aruhaz.nev, COUNT (DISTINCT tarsasjatek_id) egyedi_jatekok_szama
FROM t_vasarlas vasarlas INNER JOIN
t_aruhaz aruhaz
ON vasarlas.aruhaz_id = aruhaz.id
GROUP BY aruhaz.nev
ORDER BY egyedi_jatekok_szama DESC
)
FETCH FIRST 1 ROWS WITH TIES
;Van jobb, logikusabb megoldás?
Köszönöm!
-
user112
senior tag
Sziasztok!
Szeretnék további union-nal bővíteni egy lekérdezést, amiben viszont group by is lenne.
Hogyan tudom kihagyni azokat a mezöket amelyek nem group by -osak?
pl.select 'adat' ad, ID, nev, ertek1, ...
union
select null, id, null, sum(Ertek)
from..
group by
id,Ertekde így nem jó.
-
tm5
tag
válasz user112 #4566 üzenetére
UNION-nál a benne lévő SELECT-ek oszloplistáinak meg kell egyeznie legalább darabszámra és adat tipusra. Olyan nincs hogy "select a,b union select c".
Ha meg nem akarsz group by-olni valamilyen oszlopra, akkor meg ne tedd bele azt az oszlopot a select listába.
Vagy nem értem a problémádat... -
user112
senior tag
Több union is van, kötött sorrendben a group by-os union elött. Szerettem volna az adott oszlopba tenni az összegzés eredményét. Ahogy próbálom, az elsőt még át lehet hidalni:
select ' ', id,sum(Ertek)
működik, de a Erteket már nem tudom arrébb tolni egy, két oszloppal.
Úgy látszik két összegző mező között nem lehet "üres" mező.[ Szerkesztve ]
-
sztanozs
veterán
válasz user112 #4566 üzenetére
Hali, ennek tutira mennie kellene:
select 'adat' ad, ID, nev, ertek
from tabla..
union
select "osszesen" ad, ID, null nev, sum(ertek)
from tabla..
group by idha pedig van 5 érték, amiből csak az elsőt summázod, a többi meg üres lesz a végén:
select 'adat' ad, ID, nev, ertek1, ertek2, ertek3, ertek4, ertek5
from tabla
union
select "osszesen" ad, ID, null nev, sum(ertek) ertek1, null ertek2, null ertek3, null ertek4, null ertek5
from tabla
group by idSőt a végén még össze is rendezheted, hogy minden ID-hez a a felsprplás végére tegye az összeget, ne a tábla végére ID-nként:
select * from (
select 'adat' ad, ID, nev, ertek1, ertek2, ertek3, ertek4, ertek5
from tabla
union
select "osszesen" ad, ID, null nev, sum(ertek) ertek1, null ertek2, null ertek3, null ertek4,
null ertek5
from tabla
group by id)
order by ID, ad[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz sztanozs #4570 üzenetére
Ja, ahogy nézem nem is kell subselect, simán mehet a végére is...
select 'adat' ad, ID, nev, ertek1, ertek2, ertek3, ertek4, ertek5
from tabla
union
select "osszesen" ad, ID, null nev, sum(ertek) ertek1, null ertek2, null ertek3, null ertek4,
null ertek5
from tabla
group by id
order by ID, adJOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz user112 #4572 üzenetére
a groupby-ba nem kell két mező. csak az az egy mező kell, ami szerint aggregálsz, és az az ID mező... kipróbáltad egyáltalán, amit írtam?
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
nyunyu
félisten
válasz sztanozs #4573 üzenetére
Group by után minden olyan mezőt fel kell sorolni, ami nem szerepel az oszlopfüggvények paraméterében.
Ha van egy fixen 'kiscica' oszlopod, akkor azt is.
Értelmes interpreterrel bíró DBken valahogy így nézne ki:
select "osszesen" ad, ID, null nev, sum(ertek) ertek1, null ertek2, null ertek3, null ertek4,
null ertek5
from tabla
group by id, ad, nev, ertek2, ertek3, ertek4, ertek5;Kevésbé értelmeseken valahogy így:
group by id, 1, 3, 5, 6, 7, 8;
(Ha már a hülye Oracle nem tud alias alapján rendezni, csoportosítani, csak oszlopszámmal...)
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
user112
senior tag
Bocsánat mindenkitől, a group by-ba tévesen Erteket írtam. Ott egy második mező van, amely szintén kell az összegzés
select 'adat' ad, ID, nev, nev2, ertek1, ertek2
from tabla
union
select "osszesen" ad, ID, null nev, ID2, sum(ertek) ertek1, null ertek2
from tabla
group by id, id2
order by ID, ad -
bpx
őstag
Konstans értéket nem kell a group by-ban felsorolni.
De, tud alias alapján rendezni.
Nem, nem tud oszlopszám szerint csoportosítani.select
1 + 2 as harom,
null as ertek2,
created as letrehozva,
sum(user_id) as valami,
count(*) as darab,
'hello' as ertek3
from
dba_users
group by
created
order by
harom,
letrehozva
;
HAROM E LETREHOZVA VALAMI DARAB ERTEK
---------- - ------------------- ---------- ---------- -----
3 2020-04-16 19:04:45 6442450869 6 hello
3 2020-04-16 19:04:46 13 1 hello
3 2020-04-16 19:06:12 43 2 hello
3 2020-04-16 19:06:18 23 1 hello
3 2020-04-16 19:07:31 2147483638 1 hello
3 2020-04-16 19:08:08 36 1 hello
3 2020-04-16 19:15:29 48 1 hello
3 2020-04-16 19:15:31 49 1 hello
3 2020-04-16 19:15:37 101 2 hello
3 2020-04-16 19:18:29 61 1 hello
3 2020-04-16 19:18:41 62 1 hello
3 2020-04-16 19:20:21 70 1 hello
3 2020-04-20 20:51:53 73 1 hello -
user112
senior tag
Köszönöm a segítséget. Maradok a formázatlan kiíratásnál.
Lehet olyant csinálni a group by során, hogy a szummázott adat sora csak akkor íródjon ki, ha az (összegzett) érték egy bizonyos határ felett van?
[ Szerkesztve ]
-
sztanozs
veterán
válasz user112 #4579 üzenetére
Igen, erre van a HAVING feltétel (aggregált kifejelzés ellenőrzésére, pl a darab több, min 3
kiscica).select
1 + 2 as harom,
null as ertek2,
created as letrehozva,
sum(user_id) as valami,
count(*) as darab,
'hello' as ertek3
from
dba_users
group by
created
having
count(*) > 3
order by
harom,
letrehozva[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
deiksupp
csendes tag
MySQL-ben jártas fejlesztő van itt a fórumon?
-
Louro
őstag
Abszolút jogos a kérdés, mert van kollégám, aki senior elemző és a left join-t és a right join-t nem ésszel használja. Nem érti a különbséget. (Amúgy a bérsáv miatt lett senior :/ )
Ha nem adatbázis beállítása a kérdés, hanem egy lekérdezés, akkor szerintem sokan tudunk itt segíteni.
Mess with the best / Die like the rest
-
nyunyu
félisten
Egyáltalán kellhet valamihez a right join?
Vagy csak én kezdem mindig a fix adattartalmú táblákkal a lekérdezést, és ahhoz left joinolom az opcionálisakat?
Legalábbis az én fejemben ez a kettő ekvivalens:
select a.*,b.*
from a
right join b
on b.id=a.id;
select a.*,b.*
from b
left join a
on a.id=b.id;(Sima select * esetén az adattartalom ugyanaz lenne, csak a táblák oszlopainak sorrendje változna.)
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
Louro
őstag
Én is mellőzöm a right join-t, mert az agyunk balról jobbra értelmez. De, amikor mondja, hogy mi a feladat és hogyan kezdet neki, akkor ott volt,hogy right kellett volna. Amikor nagyon junior voltam, szégyeltem volna olyan kérdéseket feltenni, mint amiket én kapok manapság.
A senior-nak is már ajánlottam az sqlzoo.net oldalt és tegnap találtam az Oracle oldalán is egy tök jó leírást kezdőknek, ahol elég sok példa mentén van elmagyarázva.
Kicsit ON is legyek. Már 8 éve SQL-ezek. Bár nem tartom magam veteránnak kódismeret szintjén, de 5 év Oracle és most 3 év T-SQL a hátam mögött kicsit tovább lépnék. DBA irány szimpatikus. Van olyan iskola, ami különösen ajánlott vagy nagyon kerülendő?
Mess with the best / Die like the rest
-
tm5
tag
Iskola alatt tanfolyamos cégekre gondolsz? Olyanok vannak, illetve, hát, az Oracle-nak vannak különböző adminisztrációs tanfolyamai aranyárban. Szerintem ezeket olyanok tarthatják csak akik tudnak hozzá infrastruktúrát (sandbox-okat) biztosítani, akárki nem. Én kb. ezekkel kezdeném:
12c administration , Grid infrastructure
Lehet vannak újabbak is belőle. Viszont nem 2 fillérek. Valahogy a cégedet, ahol dolgozol, kéne rávenni, hogy finanszírozzák. Illetve ha multi akkor be kellene rotálni a DBA csapatba. -
Louro
őstag
Bár multi, de a smucig fajta. Inkább önerőből oldom meg. A VBA-t és az SQL-t is autodidakta módon tanultam meg. De úgy érzem eljutottam arra a szintre, hogy ezt nem oldom meg önerőből.
Ahogy este olvasgattam, az SQL Server képzések szimpatikusabbnak tűnnek. Persze oda is kell más alapozó ismeret.
Eddig csak bőszen írtam az SQL-eket és próbáltam figyelni a performanciára.
Mess with the best / Die like the rest
-
tm5
tag
Hát akkor lehet váltanék a helyedben egy olyan helyre ahol DBA-t keresenek és elfogadják az SQL-es múltadat és a szándékot, hogy te ebbe az irányba akarsz fejlődni.
A DBA-s tanfolyamok elég drágák, életszerű tudást úgyis meg munka közben lehet felszedni.
Tippre azt mondanám, hogy Oracle-s DBA-t többet keresnek, mint MSSQL-est. Mivel mind a két dialektussal foglalkoztál érdemes mind a két irányba próbálkozni, aztán amelyiknél hamarabb beesik a munka abban elmélyedni... -
nyunyu
félisten
Utóbbi pár évben járt nálunk pár webváltós arc, többek között Oracle fejlesztők és egy DBA is.
Fő profiljuk elvileg az oktatás, céges tanfolyamok szervezése, de szoktak cégekhez szakértőket és/vagy frissen képzetteket kölcsönözni is. (Kb. mint a csapból is csöpögő IT gyorstalpalók: GreenFox, Training360)
[szerk:]Hmm, fél misi náluk egy egyhetes (40 óra) Oracle DBA tanfolyam?
Kb. annyi, mint a feljebb linkelt Számalknál.[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
bpx
őstag
Ezek az Oracle saját tanfolyamai. Mindenhol ennyi lesz az ára nagyságrendileg és a tananyag is ugyanaz lesz. Az Oracle Hungary az oktatási részlegét leépítette, az oktatási partnerek tartják nekik a tanfolyamokat.
Több helyen is vannak egyedileg egyeztetett tematikájú ás formátumú oktatások is. Ezek ár/értékben kedvezőbbek. Talán.
De igazából egyik változattal sem vagyok megelégedve.
Az említett Webváltónál dolgozom, 10 éve. Nem foglalkozom oktatással, csak ha nagyon muszáj.
-
nyunyu
félisten
Jut eszembe, MS platform téren meg a NetAcademiának voltak képzései.
Nem tudom az SQL Server 2017 Admin képzésük milyen lehet.Hello IT! Have you tried turning it off and on again?
-
Louro
őstag
Most jövök a kérdéseimmel A képzések kapcsán végül a felhő alapú BI-t kezdtem el a M$ oldalán.
De párhuzamosan Python-t is.
Ezutóbbival kapcsolatban lenne egy olyan kérdésem, hogy mi lehet a Python mellett erős érv, amivel meg lehetne indokolni, hogy "kell a Python a gépekre"? Este a Stackoverflow-t olvasgatva nem nagyon találtam érvet a Python mellett. Értem, hogy az egyik egy lekérdező nyelv, másik pedig programozási. De mégis rengeteg adattudós (, de csúnya így magyarul) használ Python-t. Csak még nem látom hol jön a képbe. Aggregáció során SQL nyert. ETL során az adatok manipulálását SQL-ben is el tudnám végezni.
Elnézést, ha láma kérdés, de inkább kérdezek. (Tanulnom kell valamit, mert már pár éve csak toporgok az SQL-ben és nem hinném, hogy 20 év múlva is piacképes maradnék csak SQL-lel.)
[ Szerkesztve ]
Mess with the best / Die like the rest
-
martonx
veterán
A Python ott jön a képbe, hogy a Data Science szakmának maga az adatlekérdezés része a legkevesebb, senki nem ettől lesz data scientist. Hanem utána jön az adatok elemzése, vizualizálás, statisztikák, és erre jelenleg a legelterjedtebb a Python (megjegyzés: kb. bármilyen nyelv is jó erre pl. java, c#). Ettől még csomó esetben Python nem is kell a gépre, mert különböző IDE-kben, GUI-kon keresztül elég megírni pythonban a cuccokat, és az majd úgyis a szerveren fog futni.
Én kérek elnézést!
-
Louro
őstag
válasz martonx #4596 üzenetére
Köszönöm. Nekem is ez a legizgalmasabb a jelenlegi munkámban, bár többnyire SQL-ben oldom meg. Persze a vizualizáció Excel-ben történik - sajnos.
Esetleg tudsz mondani egy példát, hogy mi az, amit SQL-ben nem lehet vagy rosszabbul, mint Python-ban? De érzem, hogy pont a vizualizáció lesz a kulcs
Mess with the best / Die like the rest
-
tm5
tag
Mondjuk a főnök minden hétfő reggel 8-ra kér valami riportot excelben a mailboxába.
Lehet menne SQLből is, de ez pythonban tényleg csak egy pár sor. Mondjuk kell valami ütemező is. OK, ez épp pont nem data analysis , hanem csak egy kis automatizáció, de pont azt mutatja, hogy mennyi mindenre jó.
Én is most kezdek majd belemélyedni pythonba a sok SQL-ezés mellett, mert össze akarok rakni egy dashboardot arról, hogy 1. megy a rendszer 2. jók az adatok.
De ha nagyon tanulni akarsz valamit az SQL mellett akkor lehet érdemes megnézned az AWS-t vagy Azure-t. Most ezek a menő dolgok...a python mellett persze.
Új hozzászólás Aktív témák
- Rtx 4070 ti super omniblack 35 hónap garamciával
- Core2Quad Q9550 garanciával
- FULL CTO 2019 MacBook Pro Retina 13" 2.8GHZ i7 / 16GB RAM / 512 GB SSD / Magyar billentyűzet
- Nokia, retro mobilok, régi telefonok, samsung, alcatel, sony ericsson,sagem, motorola
- AMD Radeon VII 16GB Videókártya szép állapotban csavarmatricás
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest