Насколько я могу вам сказать, не нужно суб-выбора вообще:
select extract(week from created_at) as week,
count(*) as received,
sum(case when extract(week from updated_at) = extract(week from created_at) then 1 end) as done
from bugs
group by week
Это подсчитывает все ошибки в неделю и подсчитывает те, которые обновляются на той же неделе, что и «сделано».
Обратите внимание, что ваш запрос будет сообщать только правильные значения, если у вас никогда не было более одного года в вашей таблице.
Если у Вас есть больше чем один год в таблице данных необходимо включить в год в сравнении, а также:
select to_char(created_at, 'iyyy-iw') as week,
count(*) as received,
sum(case when to_char(created_at, 'iyyy-iw') = to_char(updated_at, 'iyyy-iw') then 1 end) as done
from bugs
group by week
Обратите внимание, что я использовал IYYY
в IW
для удовлетворения определения ISO года и недели вокруг конца года/начала.
Возможно небольшое объяснение о том, почему ваш исходный запрос не работал бы полезно:
«внешний» запрос использует два псевдонима
- таблица псевдоним для
bugs
имени a
- псевдоним столбца для выражения
extract(week from created_at)
по названию week
только место, где может быть использована колонка псевдоним week
находится в пункте group by
.
В подвыборном (select count(*) from bugs where extract(week from updated_at) = a.week))
псевдоним a
видна, но не псевдоним week
(так определяется стандарт SQL).
Чтобы получить подвыбор рабочий (с точки зрения видимости столбца) вам нужно будет ссылаться на полное выражение в колонке «внешней»:
(select count(*) from bugs b where extract(week from b.updated_at) = extract(week from a.created_at))
Обратите внимание, что я представил еще одну таблицу псевдонимов b
для того, чтобы он ясно указывает, из какого столбца вытекает псевдоним.
Но даже тогда у вас возникнет проблема с группировкой, поскольку вы не можете ссылаться на негруппированный столбец, подобный этому.
Вы не можете ссылаться на псевдоним, как, что вам нужно использовать 'a.extract (неделю с created_at)' вместо –
Это делает но он, похоже, не работает. Я мог бы неправильно понять ... – ndemoreau
Вы не можете использовать 'a.week' во вложенном элементе. –