Thank you for your responce, you have guessed it correctly
the only difference is the usage of MAX which I cannot use (see my
explenation on what I want to do in a seperate message)

I'm not sure IF I can do it with sub-selects either, but when subselects is
present in mysl, I could try that one..
( do not have any other database to test with, so I cannot try it out)

 but thanks anyway..


----- Original Message -----
From: "Carl Troein" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, November 13, 2001 1:23 PM
Subject: Re: order by, group by


>
> DL Neil writes:
>
> > "All keywords used must be given in exactly the order shown above. For
example, a HAVING clause must come after
> > any GROUP BY clause and before any ORDER BY clause."
>
> As far as I understood the original post, the question was if
> there's a way to get MySQL to perform an ORDER BY prior to
> doing the GROUP BY. In ANSI SQL this would be pointless, since
> you have to group by all returned fields that are not 'functions
> for use with group by'. In MySQL you can do something like
>  SELECT a,b FROM table1 GROUP BY a
> to get the value of b for an arbitrary row for each a.
> This is mostly useful when you want a large number of columns
> returned and you know that whatever you're grouping by is
> unique, i.e. COUNT(*) would be 1 for every returned row.
>
> However, it would sometimes be useful to be able to extract the
> top value of something for each value of something else, _along
> with additional information about that top value_. For instance,
> you might want to know the top score for every week's quiz, and
> along with that the name of the best student. This would typically
> be done with a subselect, along the lines of
>  SELECT date,score,name FROM quiz WHERE (date,score) IN (SELECT
>  date,MAX(score) FROM quiz GROUP BY date)
> but this will give you more than one row per date if several
> people have the same score that day.
> I think what the poster was looking for was a way to do
> this with something like (and this is very broken):
>  SELECT date,MAX(score),(name with score=MAX(score)) FROM quiz
>  GROUP BY date
> which could be written as something like
>  SELECT date,MAX(score),name FROM quiz ORDER BY score
>  GROUP BY date ORDER BY date
> since you want to pick the name that matches the highest score.
>
> Unfortunately there is no way to do this in MySQL right now.
> You will have to first
>  SELECT date,MAX(score) FROM quiz GROUP BY date
> and then loop over the result and
>  SELECT name FROM quiz WHERE date=... ORDER BY SCORE DESC LIMIT 1
>
> Once MySQL gets subselect you'll probably be able to do it like
>  SELECT date,score,name FROM quiz WHERE (date,score) IN (SELECT
>  date,MAX(score) FROM quiz GROUP BY date) GROUP BY date,score
> which would return an arbitrary person for each date's top score.
>
> I hope this makes sense and clears things up.
>
> //C
>
> --
>  Carl Troein - Círdan / Istari-PixelMagic - UIN 16353280
>  [EMAIL PROTECTED] | http://pixelmagic.dyndns.org/~cirdan/
>  Amiga user since '89, and damned proud of it too.



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to