Hirdetés
- Luck Dragon: Asszociációs játék. :)
- GoodSpeed: A megfelelő matrac kiválasztása egy hosszú folyamat végén!
- MasterDeeJay: Harc a DDR5 árak ellen, avagy mivel lehet ezt átvészelni ha mégis kell
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Magga: PLEX: multimédia az egész lakásban
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- hcl: Poco F2 Pro facepalm
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Sapphi: StremHU | Source – Self-hostolható Stremio addon magyar trackerekhez
Új hozzászólás Aktív témák
-
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 -
-
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 -
-
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... -
-
válasz
user112
#4151
üzenetére
igen, mert ilyenkor az aliasokat párhuzamosan értékeli ki az sql szabvány szerint, ergo amire hivatkozol, az akkor még nem létezik. úgy kell csinálnod, hogy miután összeadtad az 5 meződet, és elnevezted, köré írsz egy másik selectet is, és abban már használhatod a belső select aliasát. ez azért lehetséges, mert a klazuák között kötött kiértékelési sorrend van:
select darab, darabx2 (from select count(*) as darab from tabla); -
updog
őstag
válasz
user112
#4151
üzenetére
Nem tudsz ugyanazon a queryn belül aliasra hivatkozni. Rakd az egészed még egy selectbe.
--Eredeti:
select (1+2+3+4+5) as osszeg from dual;
--Invalid identifier-t ad:
select (1+2+3+4+5) as osszeg, osszeg+5 from dual;
--Megoldás:
select osszeg, osszeg+5 from(select (1+2+3+4+5) as osszeg from dual);Nyilván másik aliassal (mezővel) is így működik, nem csak konstansokkal:
select osszeg, osszeg+ertek from(select (1+2+3+4+5) as osszeg, 5 as ertek from dual); -
Apollo17hu
őstag
válasz
user112
#4091
üzenetére
Ez a két módszer:
SELECT t.azon
,t.c1
,t.c2
,CASE
WHEN t.c2 ! = 0 THEN
t.c1 / t.c2
END AS arany
,CASE
WHEN t.c1 > 10 AND CASE
WHEN t.c2 ! = 0 THEN
t.c1 / t.c2
END > 50 THEN
'x'
END hiba
FROM (SELECT 'a' azon
,20 c1
,30 c2
FROM dual
UNION
SELECT 'b' azon
,20 c1
,0 c2
FROM dual
UNION
SELECT 'c' azon
,40 c1
,NULL c2
FROM dual
UNION
SELECT 'd' azon
,500 c1
,3 c2
FROM dual) tSELECT u.*
,CASE
WHEN u.c1 > 10 AND u.arany > 50 THEN
'x'
END hiba
FROM (SELECT t.azon
,t.c1
,t.c2
,CASE
WHEN t.c2 ! = 0 THEN
t.c1 / t.c2
END AS arany
FROM (SELECT 'a' azon
,20 c1
,30 c2
FROM dual
UNION
SELECT 'b' azon
,20 c1
,0 c2
FROM dual
UNION
SELECT 'c' azon
,40 c1
,NULL c2
FROM dual
UNION
SELECT 'd' azon
,500 c1
,3 c2
FROM dual) t) u -
Apollo17hu
őstag
válasz
user112
#4089
üzenetére
Bele tudod agyazni az arany case when-jet egy masik case when-be. Vagy fogod a lekerdezesed, allekerdezesbe rakod, es ennek az allekerdezesenek az arany mezojere szinten tudsz hivatkozni.
Ha osztassal generalsz uj mezot, akkor tanacsos kivetelkezelest is alkalmazni a nullaval valo osztas hibalehetosegenek elkerulese erdekeben.
-
bpx
őstag
válasz
user112
#3906
üzenetére
Lehet a MIN helyett SUM, de ebben az esetben nincs jelentősége, hogy melyik, mert csoportonként csak 1 sorban lesz érték, a GROUP BY miatt viszont muszáj valamilyen aggregate functiont használni.
Az összeget bele lehet rakni új oszlopként, simán csak pl.:
min(Aerteke) + min(Berteke) as osszegVagy akár:
select
kod,
min(Aerteke) as Aerteke,
min(Berteke) as Berteke,
sum(ertek) as osszeg
from
(
select
kod,
ertek,
case when tipus = 'A' then ertek end as Aerteke,
case when tipus = 'B' then ertek end as Berteke
from
tabla
) group by kod; -
bpx
őstag
válasz
user112
#3904
üzenetére
Erre szoktunk PIVOT-ot használni, de egy ilyen egyszerű esetben a "lábbal hajtós" megoldás is elfogadható, pl.:
select
kod,
min(Aerteke) as Aerteke,
min(Berteke) as Berteke
from
(
select
kod,
case when tipus = 'A' then ertek end as Aerteke,
case when tipus = 'B' then ertek end as Berteke
from
tabla
) group by kod; -
tm5
tag
válasz
user112
#3784
üzenetére
Hát ennyi speckó alapján az alábbiak közül bármelyik jó lehet. Nem tudom melyik a preferált output neked:
-- egymas mellett
WITH sorsz8 AS (SELECT * FROM tabla WHERE SORSZ=8)
,sorsz12 AS (SELECT * FROM tabla WHERE SORSZ=12)
SELECT *
FROM sorsz8 a
LEFT OUTER JOIN sorsz12 b ON (a.azon = b.azon)
ORDER BY a.azon
-- egymas alatt
SELECT * FROM
(
SELECT * FROM tabla WHERE SORSZ=8
UNION
SELECT * FROM tabla WHERE SORSZ=12
)
ORDER BY azon, sorszIlletve az adatok (ismátlődések) ismeretében, esetleg UNION ALL a UNION helyett.
-
Tanisz
senior tag
válasz
user112
#3769
üzenetére
Nullif-et én sem szoktam használni.
Talán így kellene.
Amúgy egy lekérdezésbe kell, vagy tárolt eljárásba?
Milyen SQL? Oracle,MsSQL...stb?ha oracle és a mez1 és mez2 numerikus mező:
case when nvl(mez2,0) <> 0 then round((nvl(mez1,0)*100)/ mez2,0) else 0 endde nem tudom pontosan mi a feladat
Új hozzászólás Aktív témák
- GYÖNYÖRŰ iPhone 15 256GB Green -12 hónap JÓTÁLLÁS - Kártyafüggetlen, 96% Akkumulátor
- Apple iPhone 13 Pro Max / 128GB / Kártyafüggetlen / 12Hó Garancia / akku: 100%
- Apple iPhone XR 64GB, Kártyafüggetlen, 1 Év Garanciával
- Xiaomi Redmi 14C / 4/128GB / Kártyafüggetlen / 12Hó Garancia
- GYÖNYÖRŰ iPhone 12 mini 128GB White -1 ÉV GARANCIA - Kártyafüggetlen, MS3856
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

kipróbáltad egyáltalán, amit írtam?

