Re: cross tab confusion

From: Matt Johnson <johnsonmlw(at)yahoo(dot)com>
To: Oliver Elphick <olly(at)lfix(dot)co(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: cross tab confusion
Date: 2003-03-09 23:38:25
Message-ID: 20030309233825.79281.qmail@web41206.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thanks for your response.

> >
> > I'm building a pupil assessment record. I have
> these
> > two tables:
> >
> > table `pupil`
> >
> > pupil_id name
> > 1 jeff
> > 2 fred
> > 3 rita
> >
> >
> > table `reading_level`
> >
> > record_id pupil_id week level
> > 1 1 1 6.1
> > 2 2 1 4.3
> > 3 1 2 6.2
> > 4 2 2 4.4
>
>
> Does that record_id column do anything except give
> you a unique key?

Yes, I see what you're saying. It is, as you suggest,
redundant.

> Unless it relates to something in the real world, it
> is redundant,
> because (pupil_id, week) is the obvious primary key
> -- assuming you have
> a new table for each academic year...

I'd probably not want to have a new table for each
year would I? That would mean this database could only
continue to run while this school employed me! Not
many primary school teachers are database admins. I'd
want this to stand the test of time? Is that possible?
Is it too ambitious to expect this to run once it's
set up? Run and run?

> > I'd really need to present this data thus:
> >
> > name week1 week2 week3
> > jeff 6.1 6.2
> > fred 4.3 4.4
> >

I came up with this (and I was proud! I only installed
this last week)...

The static query:

SELECT distinct test.name,a1.level AS l1,a2.level AS
l2,a3.level AS l3, a4.level AS l4
FROM `test`
LEFT JOIN `test` AS `a1` ON a1.date = 1 AND a1.name =
test.name
LEFT JOIN `test` AS `a2` ON a2.date = 2 AND a2.name =
test.name
LEFT JOIN `test` AS `a3` ON a3.date = 3 AND a3.name =
test.name
LEFT JOIN `test` AS `a4` ON a4.date = 4 AND a4.name =
test.name

It did the job. But would need altering when new data
was added.

Then, I used Zope to make it dynamic, so it
incorporates new weeks' data:

SELECT distinct `test`.`name`,<dtml-in
test_get_date>`week<dtml-var date>`.`level` AS
`week<dtml-var date>`,</dtml-in>
`test`.`name` AS `lose_comma` FROM `test`

<dtml-in test_get_date>
LEFT JOIN `test` AS `week<dtml-var date>`
ON `week<dtml-var date>`.`date` = <dtml-var date>
AND `week<dtml-var date>`.`name` = test.name
</dtml-in>

Please point out any stark errors in my thinking. This
won't be a huge app (but then these things grow I
guess so it's best to get these things right).

--
Matt Johnson

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joe Conway 2003-03-10 00:14:13 Re: cross tab confusion
Previous Message Jeff Davis 2003-03-09 21:40:30 advice on weighted random selection