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.


---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to