MySQL: GROUP BY probléma: minden terméktipus legdrágább termékének a neve?
Lehet, hogy csak a fáradtság teszi, de nem találom a megoldást a következő problémára. Adott a következő tábla:
Ebből a táblából szeretném visszakapni terméktípusonként a legdrágább termékek nevét. A következő lekérdezést alkottam:
Namost ennek a lekérdezésnek az eredménye ez lesz:
Vagyis nem a maximális árhoz tartozó termék nevét kapom vissza, hanem az első termék nevét, amely ahhoz a csoporthoz tartozik. Miért van ez, és hogy tudnám az engem érdeklő termék nevét visszakapni?
.bonga
■ TermekId TipusId TermekNev Egysegar
-----------------------------------
1 1 félcipő 5000
2 1 csizma 10000
3 2 sál 1000
-----------------------------------
1 1 félcipő 5000
2 1 csizma 10000
3 2 sál 1000
Ebből a táblából szeretném visszakapni terméktípusonként a legdrágább termékek nevét. A következő lekérdezést alkottam:
SELECT `TermekNev`, MAX(`Egysegar`) AS `Ar` FROM `termekek` GROUP BY `TipusId`
Namost ennek a lekérdezésnek az eredménye ez lesz:
TermekNev Ar
----------------
félcipő 10000
sál 1000
----------------
félcipő 10000
sál 1000
Vagyis nem a maximális árhoz tartozó termék nevét kapom vissza, hanem az első termék nevét, amely ahhoz a csoporthoz tartozik. Miért van ez, és hogy tudnám az engem érdeklő termék nevét visszakapni?
.bonga
subquery vagy sztringműveletek
ez azért van, mert a group by mindig az első sorokat szedi össze, előtte valahogy rendezni kell a táblát.
gex
jah
Azért köszönöm, ez is jó!
.bonga
Sikerült!
.bonga
mysql sucks
És ez így is van rendjén, hisz a group by által összefogott sorok egy halmazt alkotnak, amely nem rendezett, nem tudhatod, hogy épp melyik elemét fogod visszakapni.
Felhő
xD
Bár sok éves topic, de ezt
A hiba az eredeti lekérésedben, hogy nem veszed figyelembe, hogy a GROUP BY-al csoportot hozol létre, és utána a MAX ebből a csoportból választ. Ha nem választasz ki egy konkrét sort a csoportból, akkor mindig a csoport legelső sorához tartozó értéket fogja visszaadni, mint a név esetén is.