/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
limit og max i mysql
Fra : Sique


Dato : 29-01-02 19:36

Hej

Når jeg laver flg statement i mysql:

SELECT sum(Place) FROM result WHERE competetee = 'something' ORDER BY
Max(Place) limit 0,3


Havde jeg satset på at få summen af de tre første kolloner tilbage....Men
det sker ikke.

Istedet returneres summen for alle kolonner.

Nogen der ved hvad der er galt?

Mvh
Regin



 
 
Nis Jorgensen (30-01-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 30-01-02 10:36

On Tue, 29 Jan 2002 19:36:15 +0100, "Sique" <none@at.all> wrote:

>
>Når jeg laver flg statement i mysql:
>
>SELECT sum(Place) FROM result WHERE competetee = 'something' ORDER BY
>Max(Place) limit 0,3
>
>
>Havde jeg satset på at få summen af de tre første kolloner tilbage....Men
>det sker ikke.
>
>Istedet returneres summen for alle kolonner.
>
>Nogen der ved hvad der er galt?

Ja. GROUP BY (ogsaa implicit som her) udfoeres foer ORDER BY. Derfor
grupperes alle raekkerne sammen, MAX og Sum udfoeres, den ene
resultatraekke 'ordnes' og resultatsaettet begraenses til de tre
foerste raekker.

Jeg forstaar heller ikke helt din ORDER BY Max(Place). Mener du ikke
bare ORDER BY Place?

Det kraever nok under alle omstaendigheder noget ret kompliceret
subqueryvaerk at goere det, og det tror jeg ikke mySQL understoetter.
Noget i retning af

SELECT Sum(Place) FROM (SELECT Place FROM result AS r1 WHERE
competetee = 'something' AND 3 > (SELECT COUNT(*) FROM result AS r2
WHERE competetee = 'something' AND (r2.Place > r1.Place OR (r2.Place =
r1.Place AND r2.ID > r1.ID))));

ID er primaernoeglen for tabellen

Den sidste betingelse 'AND 3 > (SELECT COUNT ...)' kan muligvis
erstattes af en 'ORDER BY Place LIMIT 0,3' - men det er ikke standard
SQL.

--
Nis Jorgensen
Amsterdam

Join the Patti Beadles Fan Club!
Details to follow.

Kristian Damm Jensen (30-01-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 30-01-02 10:21

Sique wrote:
>
> Hej
>
> Når jeg laver flg statement i mysql:
>
> SELECT sum(Place) FROM result WHERE competetee = 'something' ORDER BY
> Max(Place) limit 0,3
>
> Havde jeg satset på at få summen af de tre første kolloner tilbage....Men
> det sker ikke.
>
> Istedet returneres summen for alle kolonner.
>
> Nogen der ved hvad der er galt?

Evalueringsrækkefølge.

Først from: join tabellerne sammen.
Dernæst where: Begræns antallet af resultatrækker
Så Select: Bestem dig for, hvilke rækker, der skal ud.
Så group by / aggregate-functions (som fx sum)
(Vi springer having over)
Til slut sorteres resultatet
og i dette tilfælde tilføjes en ikke-standard krølle: kun de 3 første
rækker vælges.

Men på det tidspunkt er sum-beregningen for længst gennenført.

Hvad du gerne vil have er

select sum(place)
from (select Place
FROM result
WHERE competetee = 'something'
ORDER BY Place
limit 0,3)

Dette kan så vidt jeg har forstået ikke lade sig gøre i MySQL
(subselects), så jeg er bange for at du bliver nødt til at gemme
resultatet af sub-selecten i et mellemresultat i stedet.

Hvad forventede du i øvrigt at opnå med ORDER BY MAX(Place) i stedet for
bare ORDER BY Place?
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.dk | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste