[EMAIL PROTECTED] wrote on 01/17/2005 06:45:22 PM:
> Hi there:
>
> I have a "How do I..." SQL question regarding selecting
> distinct values from a field not included in an aggregated
> query when LIMIT is in effect, illustrated by the
> following example:
>
> Table a contains the names of individuals, the places
> they have visited and the year in which they were visited.
>
> Let's see who has visited where and when:
>
> SELECT * FROM a;
>
> name place year
> ------ ------- ------
> kim north 2004
> kim south 2003
> kim south 2003
> bob west 2004
> bob west 2004
> bob west 2003
> joe south 2004
> joe south 2005
> sue west 2004
> bob east 2003
> joe east 2004
> joe east 2004
> sue south 2004
> bob north 2004
> bob north 2005
>
> Summarize data by number of places visited by year:
>
> SELECT count(*) AS count, name, year FROM a
> GROUP BY name, year
> ORDER BY count DESC, name ASC;
>
> count name year
> ------- ------ ------
> 3 bob 2004
> 3 joe 2004
> 2 bob 2003
> 2 kim 2003
> 2 sue 2004
> 1 bob 2005
> 1 kim 2004
> 1 joe 2005
>
> Return only four rows beginning at second row:
>
> SELECT count(*) AS count, name, year FROM a
> GROUP BY name, year
> ORDER BY count DESC, name ASC
> LIMIT 4 OFFSET 1;
>
> count name year
> ------- ------ ------
> 3 joe 2004 s,e,e
> 2 bob 2003 w,e
> 2 kim 2003 s,s
> 2 sue 2004 s,w
>
> Select only places visited included in LIMITed query:
>
> SELECT DISTINCT place FROM a ????;
Put the results of the LIMITed query into a temporary table and re-query.
CREATE TEMPORARY TABLE tmpStep1 (
freq int
, name varchar(25)
, year int
);
INSERT tmpStep1 (freq, name, year)
SELECT count(*) AS count, name, year FROM a
GROUP BY name, year
ORDER BY count DESC, name ASC
LIMIT 4 OFFSET 1;
select distinct a.place
from tmpStep1 ts1
INNER JOIN a
on a.name = ts1.name;
Then you should get the list:
>
> place
> -------
> south
> west
> east
>
> Note that the place north does not appear in the last result
> because north was only visited by bob in 2005 and kim in 2004,
> records which are not included in the limited result.
>
> Any help appreciated.
>
> I would like to be compatible with 3.23.xx.
>
> -Bob
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
>
Basically, if you need to treat a set of results as source data, your best
option is to make a table (temporary or permanent) out of your results.
Then when you are through, cleanup for the next time.
DROP TEMPORARY TABLE tmpStep1;
Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine