Re: FW: query optimization question
От | Stephan Szabo |
---|---|
Тема | Re: FW: query optimization question |
Дата | |
Msg-id | 20021106080742.G82367-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | FW: query optimization question (<terry@ashtonwoodshomes.com>) |
Ответы |
Re: FW: query optimization question
|
Список | pgsql-sql |
On Wed, 6 Nov 2002 terry@ashtonwoodshomes.com wrote: > However, for the total deficiencies I am then splitting up the total into > aging groups, eg <30, 30-60, 60-90, and >90 days old. The query for that > looks like the below. But before I paste it in, I would like to optimize > it, if I could do so with a group by clause I most certainly would, but I > don't see how I can BECAUSE OF THE AGING BREAKDOWN: Well, as a first step, I'd suggest using an age function as already suggested and a temporary table to hold the grouped by values temporarily and then doing the subselects against that. Maybe something like (untested): create temp table defs asselect agefunc(dt.days_old_start_date) as ageval, count(lots.lot_id) as lots from deficiency_tableas dt, lots, deficiency_status as ds where dt.lot_id = lots.lot_id and lots.dividion_id=proj.division_idand lots.project_id=proj.project_id and dt.deficiency_status_id=ds.deficiency_status_idand ts.is_outstanding and dt.assigned_supplier_id='101690'group by ageval; -- same general thing for other repeated queries select project_id, marketing_name,(select sum(lots) from defs) as def_count,(select lots from defs where ageval=0) as def_count_less_30,(selectlots from defs where ageval=1) as def_count_30_60,... Since you want 0's instead of nulls, you'd probably need to do a coalesce for the subselects, and this will go through the probably 5 or so line temp table rather than the presumably large other table. I haven't spent much thought trying to force it down into a single query, but that seems a bit harder.
В списке pgsql-sql по дате отправления: