Thank you to each of you who responded with help. 
Unfortunately, while testing a Python script, I found
the drawback to the geometric mean calculation:

If your sample size is in the hundreds of thousands,
it's easy to hit the hardware (processor) limitation
on the number size while multiplying the sample values
together.

Now I know why I don't see geometric mean used much.

Best of luck,

Andrew Gould

--- Gordon <[EMAIL PROTECTED]> wrote:
> This is probably not the most elegent solution, but
> here is something
> that works in 3 SQL statements using user variables.
> 
> mysql> select @gmean := 1, @ct := count(*) from
> g_mean;
> mysql> select @gmean := @gmean * test_val from
> g_mean;
> mysql> select power(@gmean, (1/@ct)) as Geo_Mean;
> 
> See details below
> 
> Gordon Bruce
> Interstate Software
> A MySQL US Training Partner
> 
> mysql> create table g_mean (test_val float);
> Query OK, 0 rows affected (0.02 sec)
> 
> mysql> insert into g_mean values
> (23),(32),(12),(145),(18);
> Query OK, 5 rows affected (0.00 sec)
> Records: 5  Duplicates: 0  Warnings: 0
> 
>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> 
> mysql> select avg(test_val) from g_mean;
> +---------------+
> | avg(test_val) |
> +---------------+
> |            46 |
> +---------------+
> 1 row in set (0.00 sec)
> 
>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> 
> mysql> select @gmean := 1, @ct := count(*) from
> g_mean;
> +-------------+-----------------+
> | @gmean := 1 | @ct := count(*) |
> +-------------+-----------------+
> |           1 |               5 |
> +-------------+-----------------+
> 1 row in set (0.00 sec)
> 
> mysql> select @gmean := @gmean * test_val from
> g_mean;
> +-----------------------------+
> | @gmean := @gmean * test_val |
> +-----------------------------+
> |                          23 |
> |                         736 |
> |                        8832 |
> |                     1280640 |
> |                    23051520 |
> +-----------------------------+
> 5 rows in set (0.00 sec)
> 
> mysql> select power(@gmean, (1/@ct)) as Geo_Mean;
> +-----------+
> | Geo_Mean  |
> +-----------+
> | 29.685196 |
> +-----------+
> 1 row in set (0.02 sec)
>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> 
> > -----Original Message-----
> > From: Andrew Gould [mailto:[EMAIL PROTECTED]]
> > Sent: Saturday, May 11, 2002 7:51 AM
> > To: [EMAIL PROTECTED]
> > Subject: geometric mean aggregate function
> > 
> > Has anyone out there developed a costum, aggregate
> > function for calculating the geometric mean of
> > populations?  If not, would anyone be interested
> in
> > creating one?
> > 
> > My development experience/skills is limited to SQL
> and
> > simple Python scripts; so I had difficulty
> > understanding the documentation on creating
> functions.
> > 
> > Why _you_ might want this function:  Geometric
> mean is
> > a good replacement for arithmetic mean when you
> want
> > to reduce the effects of extreme, infrequent
> values
> > without excluding the occurrences altogether.  An
> > example is Medicare's (US government health
> insurance
> > for the elderly) use of geometric mean to derive
> > standard lengths of stay (days in the hospital)
> for
> > patients within Diagnostic Related  Groups (DRGs).
> > For companies calculating statistics for internal
> > process improvement projects, this function would
> be
> > very useful because is describes what usually
> happens
> > better than the arithmetic mean (see below).
> > 
> > Calculating geometric mean:
> > Geometric mean is calculated by multiplying the
> values
> > of each occurrence together and raising the
> resulting
> > product by the power of 1 divided by the sample
> size.
> > Therefore, the geometric mean of 2 3, 4, 5, and 40
> > would be (2*3*4*5*40)^(1/5) = 5.448139855, which
> is
> > very different from the arithmetic mean of 10.8. 
> I
> > certainly would have liked my school grades to be
> > calculated this way!
> > 
> > If anyone has created this function and would be
> > willing to share it, I would greatly appreciate
> it.
> > If the developers on this list see value in adding
> it
> > as a standard function to MySQL, I think you will
> be
> > ahead of the pack as industries are becoming more
> data
> > savvy.
> > 
> > Is this a fairly simple request; or would it have
> been
> > more appropriate to send this request to
> > [EMAIL PROTECTED]?
> > 
> > Thanks,
> > 
> > Andrew Gould
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > LAUNCH - Your Yahoo! Music Experience
> > http://launch.yahoo.com
> > 
> >
>
---------------------------------------------------------------------
> > 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 <mysql-unsubscribe-
> > [EMAIL PROTECTED]>
> > Trouble unsubscribing? Try:
> http://lists.mysql.com/php/unsubscribe.php
> 
> 
>
---------------------------------------------------------------------
> 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
> 


__________________________________________________
Do You Yahoo!?
LAUNCH - Your Yahoo! Music Experience
http://launch.yahoo.com

---------------------------------------------------------------------
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