W3C home > Mailing lists > Public > www-ql@w3.org > April to June 2004

RE: Joins with groupby (No example in W3 Draft)

From: Houman Khorasani <khorasani@web.de>
Date: Tue, 22 Jun 2004 14:39:55 -0500
To: 'Priscilla Walmsley' <priscilla@walmsley.com>, www-ql@w3.org
Message-id: <01LBLNSFTL3QAFZ38A@uwplatt.edu>

Hi Priscilla,

Thank you very much, for your help.  Actually it didn't work but I didn't
give up and after keep trying over many days I could solve it at the end. :)
Maybe there is still a way to improve the performance of this query. If you
see something so please tell me to change and try that.

There is just one solution for 'Group By' what does exactly the same what
SQL 'Group By' does:


let $temp :=	for $wbtt in doc("wisc_berkeley_tracetime.xml")//row[dat =
		for $wbtl in doc("wisc_berkeley_tracelist.xml")//row[rID =
		return <g>{($wbtl/rID, $wbtl/ip, $wbtt/min, $wbtt/dat)}</g>

for $distinctIp in distinct-values($temp//ip)

let $rID :=	for $i in $temp[ip=$distinctIp] 
		return $i//rID

let $dat := 	for $i in $temp[ip=$distinctIp] 
		return $i//dat

let $min := 	for $i in $temp[ip=$distinctIp] 
		return $i//min

order by $distinctIp

		{ $rID[1] }
		<ip>{ $distinctIp }</ip>
		{ $dat[1] }
		{ $min[1] }

This is equivalent to:

 	wisc_berkeley_tracelist INNER JOIN wisc_berkeley_tracetime
  	ON wisc_berkeley_tracelist.rID = wisc_berkeley_tracetime.rID WHERE
 	(wisc_berkeley_tracetime.dat = '20000801000000')
 	GROUP by ip
 	ORDER BY ip;

This pattern can be used in any case.  I have tested 4 Queries some of them
with 1 others even with 2 inner-joins, grouping by ip or min.  All of them
work fine.

That was a hard job to figure that out.
If you still see something what can be improved regarding the performance, I
appreciate to know it.

Best Regards
Houman M. Khorasani
University of Wisconsin Platteville
Received on Tuesday, 22 June 2004 15:40:03 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 22:43:43 UTC