Chris,

Your WHERE clause is weeding out the NULL joined entries. Try something like...

select
m.repyear as repyear,
count(*) as count
from years y
left join mortality m on y.year=m.repyear
where (
m.region like 'Southwest'
and m.repyear>1985
and m.dthcode!=4
and (m.cause like '%red tide%' or m.remarks like '%red tide%')
) OR m.year IS NULL
group by m.repyear;

PB

-----

Chris Fonnesbeck wrote:
I am trying to figure out how to get a comprehensive count of rows in
a database by year. Unfortunately, when there are no rows for a
particular year, the year is omitted from the result set, rather than
showing up with a zero count:

mysql> select count(*) as count, repyear from mortality where region
like 'Southwest' and repyear>1985 and dthcode!=4 and (cause like '%red
tide%' or remarks like '%red tide%') group by repyear;
+-------+---------+
| count | repyear |
+-------+---------+
|     1 |    1994 |
|   145 |    1996 |
|    15 |    1997 |
|    12 |    1999 |
|    14 |    2000 |
|    16 |    2001 |
|    36 |    2002 |
|    91 |    2003 |
|     5 |    2004 |
|    52 |    2005 |
+-------+---------+
10 rows in set (0.09 sec)

Looking at some online help, I understand that I am supposed to create
a table with the years as entries, then run a left join with the same
query in order to get my zeroes included. I went ahead and did this:

mysql>  select * from years;
+------+
| year |
+------+
| 1986 |
| 1987 |
| 1988 |
| 1989 |
| 1990 |
| 1991 |
| 1992 |
| 1993 |
| 1994 |
| 1995 |
| 1996 |
| 1997 |
| 1998 |
| 1999 |
| 2000 |
| 2001 |
| 2002 |
| 2003 |
| 2004 |
| 2005 |
+------+
20 rows in set (0.00 sec)

However, running a left joined query using this table gives the same result:

mysql> select count(*) as count, m.repyear as repyear from years y
left join mortality m on y.year=m.repyear where m.region like
'Southwest' and m.repyear>1985 and m.dthcode!=4 and (m.cause like
'%red tide%' or m.remarks like '%red tide%') group by m.repyear;
+-------+---------+
| count | repyear |
+-------+---------+
|     1 |    1994 |
|   145 |    1996 |
|    15 |    1997 |
|    12 |    1999 |
|    14 |    2000 |
|    16 |    2001 |
|    36 |    2002 |
|    91 |    2003 |
|     5 |    2004 |
|    52 |    2005 |
+-------+---------+
10 rows in set (0.12 sec)

So, I'm at a loss as to how to get a complete result set. I do find it
a bit strange that sql returns an incomplete query as a default.

Any ideas most welcome.

--
Chris Fonnesbeck + Atlanta, GA + http://trichech.us



--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.15.10/263 - Release Date: 2/16/2006


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to