@Rphoenix

Группировка с выборкой?

Допустим, есть такой запрос:

select case when id in (1,2,3,4) then 'Начальная школа'
            when id in (5,6,7,8,9) then 'Средняя школа'
            when id in (10,11) then 'Старшая школа'
           end Class_type,
 COUNT(*), sum(case when s.ocenka>4 then 1 end as) 'Отличники' from class c
group by Class_type


Нужно, чтобы в таком виде отчета было при COUNT(*) 5 класс отходил в начальную школу, а при sum как есть.....
это для примера, у меня более сложный запрос.
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker
Программист, энтузиаст
Делайте вместо
COUNT(*)
подзапрос.
SELECT
  case when id in (1,2,3,4) then 'Начальная школа'
          when id in (5,6,7,8,9) then 'Средняя школа'
          when id in (10,11) then 'Старшая школа'
          end AS Class_type,
  (
    SELECT COUNT(*) 
    FROM class cc 
    WHERE (
      case when сс.id in (1,2,3,4,5) then 'Начальная школа'
      when cc.id in (6,7,8,9) then 'Средняя школа'
      when cc.id in (10,11) then 'Старшая школа'
    ) = (
      case when c.id in (1,2,3,4) then 'Начальная школа'
      when c.id in (5,6,7,8,9) then 'Средняя школа'
      when c.id in (10,11) then 'Старшая школа'
    )
  ), 
  SUM(case when s.ocenka>4 then 1 end) AS 'Отличники' 
FROM class c
GROUP BY Class_type

Как-то так через задницу. Запутано. Не проверял, нет файрбёрда под рукой
Ответ написан
@MaximaXXl
По описанию не понятно кто на ком стоял =)

select Class_type, 
count(1) over (partition by case when Class_type = 'HZ' then 'Начальная школа' else Class_type end) cnt,
sum(for_sum) over  (partition by case when Class_type = 'HZ' then 'Средняя школа' else Class_type end) sum_
from (
select case when id in (1,2,3,4) then 'Начальная школа'
when id = 5 then 'HZ'
when id in (6,7,8,9) then 'Средняя школа'
when id in (10,11) then 'Старшая школа'
end Class_type, 
case when s.ocenka>4 then 1 else 0 end for_sum
from class c ) t
group by Class_type
having Class_type <> 'HZ'


Если хотите что-то более вразумительное, дайте пример данных и результат который Вы хотели бы получить (будет понятнее)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы