Я вижу два варианта.
1) Работа с ним в приложении .Следующий запрос выполнит необходимую агрегацию в базе данных и вернет 4 строки для каждого date_audience (по одной для каждого значения quality_apuration).
select date_audience
,quality_apuration
,count(*)
from pp_base
where date_audience >= date '2011-01-01'
and date_audience <= date '2011-02-28'
group
by date_audience
,quality_apuration
order
by date_audience
,quality_apuration;
Это предпочтительно, когда вы ожидаете изменения значений quality_apuration.
2) Работа с ним в базе данных .Вы можете определить представление следующим образом:
create or replace view pp_view as
select date_audience
,sum(case when quality_apuration = '1' then 1 else 0 end) as very_good
,sum(case when quality_apuration = '2' then 1 else 0 end) as good
,sum(case when quality_apuration = '3' then 1 else 0 end) as bad
,sum(case when quality_apuration = '4' then 1 else 0 end) as no_apuration
,count(quality_apuration) as total
from pp_base
group
by date_audience;
... из приложения, которое вы затем выберете следующим образом:
select ...
from pp_view
where date_audience >= date '2011-01-01'
and date_audience <= date '2011-02-28'
order
by date_audience;
Конечно, всякий раз, когда вы добавляете другое значение для quality_apuration, вам придется изменить определение представления.Тем не менее, это лучше, чем изменять все запросы.