ruby on rails - mysql pivot to a postgres pivot table -
i using mysql fine until switched 1 of rails apps heroku , had change over. works expected except have 1 query totally funky.
this postgres, under mysql identical except extract dow , group additions, isn't problem, problem used sum days of week listed, sums entire table... , avg off since gets table avg , not days listed.
is there way sum of listed days without having select, i'm missing?... avoid doing select ( select ... ) subquery sum of columns.
thanks
select rooms.name, rooms.id, max(case when (extract(dow availables.bookdate) - extract(dow date '2010-01-20')) = -3 (availables.price*1) else 0 end) day1, max(case when (extract(dow availables.bookdate) - extract(dow date '2010-01-20')) = -2 (availables.price*1) else 0 end) day2, max(case when (extract(dow availables.bookdate) - extract(dow date '2010-01-20')) = -1 (availables.price*1) else 0 end) day3, (avg(availables.price)*1) avg, (sum(availables.price)*1) * 2 sum, max((sign(spots)-1) + 2) beds availables inner join rooms on availables.room_id=rooms.id availables.room_id = '1818' , availables.price > 0 group rooms.id, rooms.name
you didn't schema is, pretended of data in 1 table, omitting join. should no trouble replace "stuff" join.
i created simple table stand in join:
wayne=# \d stuff table "pg_temp_1.stuff" column | type | modifiers ----------+---------------+---------------------------------------------------- id | integer | not null default nextval('stuff_id_seq'::regclass) room_id | integer | not null bookdate | date | not null price | numeric(10,2) | not null indexes: "stuff_pkey" primary key, btree (id)
added data it:
wayne=# select * stuff; id | room_id | bookdate | price ----+---------+------------+------- 1 | 1 | 2010-01-11 | 60.00 2 | 1 | 2010-01-10 | 60.00 3 | 2 | 2010-01-10 | 55.00 4 | 2 | 2010-01-09 | 55.00 5 | 3 | 2010-01-09 | 70.00 6 | 3 | 2010-01-08 | 70.00 (6 rows)
and here's query last 2 full days, plus today, grouped date, count, sum , avg price.
wayne=# select bookdate, count(*), sum(price), avg(price) stuff \ bookdate >= date_trunc('day', now()) - interval '2 days' \ group bookdate order bookdate; bookdate | count | sum | avg ------------+-------+--------+--------------------- 2010-01-09 | 2 | 125.00 | 62.5000000000000000 2010-01-10 | 2 | 115.00 | 57.5000000000000000 2010-01-11 | 1 | 60.00 | 60.0000000000000000 (3 rows)
Comments
Post a Comment