query or design question

From: Adam Witney <awitney(at)sghms(dot)ac(dot)uk>
To: pgsql-sql <pgsql-sql(at)postgresql(dot)org>
Subject: query or design question
Date: 2003-10-20 10:58:00
Message-ID: BBB97E48.26975%awitney@sghms.ac.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hi,

I have a table like so

CREATE TABLE imagene (
id int
bioassay_id int
gene_id text
s_row int
s_column int
s_meta_row int
s_meta_column int
sig_median numeric
bkg_median numeric
);

Rows are unique on (bioassay_id, gene_id, s_row, s_column, s_meta_row,
s_meta_column)

They are grouped like this (note, the counts will not always be the same)

cabbage=# select bioassay_id, count(*) from imagene group by bioassay_id;
bioassay_id | count
-------------+-------
106 | 10944
107 | 10944

And I need to generate an output like this......

bioassay_id=106 bioassay_id=107
---------------------- ----------------------
gene_id, sig_median, bkg_median, sig_median, bkg_median

I can do something like this

SELECT a.gene_id,
a.sig_median, a.bkg_median,
b.sig_median, b.bkg_median
FROM
imagene a,
imagene b
WHERE
a.s_meta_row = b.s_meta_row AND
a.s_meta_col = b.s_meta_col AND
a.s_row = b.s_row AND
a.s_column = b.s_column AND
a.bioassay_id = 106 AND
b.bioassay_id = 107;

But this is quite slow... And not generic as I may need to generate the
output for more than two bioassay_ids. Also I may need to do an outer join
to make sure I get all rows from both data sets?

I am not sure if a crosstab function will do this?

Any ideas of pointers would be greatly appreciated

Thanks

Adam

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Christopher Browne 2003-10-20 12:29:45 Re: Max input parameter for a function
Previous Message Alvar Freude 2003-10-20 09:46:09 Re: [postgres] PostgreSQL-DB auf Web-Schnittstelle bringen