powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объедение в группировке
15 сообщений из 15, страница 1 из 1
Объедение в группировке
    #39942132
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
ID - номер класса (1-11), NAME - название класса (класс первый - класс одиннадцатый, т.е. строка) и COUNT - сколько учеников в классе. Допустим так.

select ID, NAME, COUNT(*) from class c
group by c.id, c.name

Он выводит

1 первый класс 40
2 второй класс ....

А мне нужно в три строки

Начальная школа
Средняя школа
Младшая школа

где sum по 1-4, 5-9 и 10-11 соответственно.
То есть тут нужен case when.... having...? Как правильнее?
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942137
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
номер класса, делённый на пять, даёт группу : 0 - начальные, 1 - младшие и 2 - средние.
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942147
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select case a.priz_spr
       when 1 then 'Начальная школа'
       when 2 then 'Начальная школа'
       when 3 then 'Начальная школа'
       when 4 then 'Средняя школа'
       when 5 then 'Средняя школа'
       when 6 then 'Средняя школа'
       when 7 then 'Средняя школа'
       when 8 then 'Средняя школа'
       when 9 then 'Старшая школа'
       when 10 then 'Старшая школа'
       when 11 then 'Старшая школа'
       end,
       count(*)
from sprav a
where a.priz_spr<=11
group by 1
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942152
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, большое спасибо!
тоже самое писал, только в конце "group by a.priz_spr" тогда он просто на каждый класс пишет, а при "group by 1" осталось три строки как надо. Странно, вроде значения не должно иметь?
_____________
а нет, все так же

select case C.NUBMER when 1 then 'Начальная школа' when 2 then 'Начальная школа' when 5 then 'Средняя школа' end, sum(POSTUPILO_UCH) as VSEGO
from CLASS C
where (C.DATA between :DATA_S and :DATA_PO)
group by 1

Сейчас идет

<null> 30
Начальная школа 20
Средняя школа 35

Т.е. первые две строки так и не объединяет :(

Мб Group by case как-то использовать?
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942153
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

можно "select from select" для лучшего понимания, но в данном случае "group by 1" работает как надо.
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942156
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix
....Странно, вроде значения не должно иметь?


Расшифруй свои мысли
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942166
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

я выше написал, что он не соединяет строки
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942197
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

всё же хорошо. Что не так?
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942201
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenixон не соединяет строки

А почему он должен их соединять, если ты явно сказал ему группировать не по ним?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942209
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто у него case кривой.
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942211
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select case a.priz_spr
       when 1 then 'Начальная школа'
       when 2 then 'Начальная школа'
       when 3 then 'Начальная школа'
       when 4 then 'Средняя школа'
       when 5 then 'Средняя школа'
       when 6 then 'Средняя школа'
       when 7 then 'Средняя школа'
       when 8 then 'Средняя школа'
       when 9 then 'Старшая школа'
       when 10 then 'Старшая школа'
       when 11 then 'Старшая школа'
...

А если бы там было 1000 значений и три группы - ты бы их тоже все перечислял ?
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942216
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942223
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

да нет. ТС должен же что-то сам сделать. Хоть оптимизировать. Вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select case
       when a.priz_spr between 1 and 3 then 'Начальная школа'
       when a.priz_spr between 4 and 8 then 'Средняя школа'
       when a.priz_spr between 9 and 11 then 'Старшая школа'
       end,
       count(*)
from sprav a
where a.priz_spr<=11
group by 1


лучше?
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942229
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix
Как правильнее?
Правильно - это табличка с соотношением класс-этап, джойн с оной и группировка по ней же.
...
Рейтинг: 0 / 0
Объедение в группировке
    #39942231
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI
лучше?
Гораздо :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объедение в группировке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]