powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос с группировкой
25 сообщений из 57, страница 2 из 3
Запрос с группировкой
    #39589900
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch, с CTE всё-равно два селекта писать.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589913
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

да, но не копипастом, таблица упоминается только один раз
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589915
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

дело не в селектах, а в количестве фетчей. Такое написание позволяет сделать ровно один full scan таблицы.
Но повышается требования к TempCacheLimit.

Arioch,

Для оконных функций необходимо сформировать окно, для чего требуется полностью выполнить запрос. После оконных функций выполняются только сортировка и ограничение результата с помощью FIRST/SKIP, ROWS или начиная с 3.0 согласно стандарту FETCH/OFFSET
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589925
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

для обычных (не оконных) аггрегатов тоже надо вроде как полностью выполнить запрос, но тем не менее HAVING существует

я по сути не могу уловить разницу, почему как кажется один и тот же фильтр нельзя наложить на оконный агрегат, но можно на неоконный

тем более с CTE ты сам и показал, что технических ограничений нет, надо только обойти ограничения стандарты и получаем результат в один проход
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589965
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, тут 21133707 у ТС'а новая вводная, с которой OVER не канает.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589969
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryArioch"А ещё под эту музыку мы можем делать ТАК!"Неее. Под эту музыку мы можем делать ТАК.
Код: sql
1.
2.
3.
select name, left((min(cast(value as char(10)) || date), 10) value, substring(min(cast(value as char(10)) || date) from 11) date
  from MyTable
  group by name



не получится, ибо текстом если, то "100" < "99"
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589971
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ТС-у я сразу ответил в третьем сообщении

тут сама тема любопытная ;-)
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589977
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochWildSeryпропущено...
Неее. Под эту музыку мы можем делать ТАК.
Код: sql
1.
2.
3.
select name, left((min(cast(value as char(10)) || date), 10) value, substring(min(cast(value as char(10)) || date) from 11) date
  from MyTable
  group by name




не получится, ибо текстом если, то "100" < "99"

Хотя, если достроить LPAD'ом, то....

но кэш может и лечь DD
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589980
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

тут можно спорить до бесконечности. Придумали вот так. HAVING появился задолго до того как придумали оконные функции. Собственно он для фильтрации по результатам оконных функций и не задумывался.
Кроме того есть существенная разница. Агрегатные функции почти всегда уменьшают кардинальность итоговой выборки, а оконные функции добавляют результат в каждую запись выборки.

Порядок выполнения SELECT запроса такой.

1. Чтение потоков, соединение, фильтрация (FROM, WHERE)
2. Группировка и вычисление агрегатных функций (если есть)
3. HAVING (если есть)
4. Вычисление выражений и подзапросов в предложении SELECT
5. Формирование окон и вычисление оконных функций (если есть)
6. UNION с другими потоками (если есть)
7. Сортировка (если есть)
8. Ограничение резалтсета FIRST ... SKIP (если есть)
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589984
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

да мы уже не о ТСе. Он ответ получил как это сделать аж 3-мя способами. Продолжаем про оконные функции беседовать. Пока что народ плохо понимает как они работают.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589992
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, на 2.5 есть еще способ в один проход.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
EXECUTE BLOCK
  RETURNS
  (
    name TYPE OF COLUMN test.name,
    date TYPE OF COLUMN test.date
  )
AS
  DECLARE VARIABLE n TYPE OF COLUMN test.name DEFAULT NULL;
BEGIN
  FOR
      SELECT name, date
        FROM test
        ORDER BY name, value
        INTO: name, date
    DO
      IF (NOT(:n IS NOT NULL AND :n = :name)) THEN
        BEGIN
          n = name;
          SUSPEND;
        END
END
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39589997
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, сейчас только заметил, что WildSery похожий способ уже предложил.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590063
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select
X0.name,
(select first 1 X1.date from TEST X1 where X1.name=X0.name order by X1.value)
from TEST X0
group by 1
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590075
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelba,

и это уже было

21133762 21133774
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590080
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHERE
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590106
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему это уже третье задание от этого препода. В прошлый раз цены суммировали, что до того, уже не помню. Студеры форум по наследству друг другу передают.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590156
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

жалко, что решения не передают вместе с форумом
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590158
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochХотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHEREРазница большая - не возвращает сам volume.
Надо 2 таких подзапроса.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590164
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochХотя, если достроить LPAD'ом, то....
но кэш может и лечь DDС другими случаями группировки нет разницы, и там, и там таблицу сортировки создавать.
И вообще, мне не на чем замерить, но всё же однопроходная группировка, вдруг даже быстрее оконной функции.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590178
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл на чём попробовать. К сожалению, 600 тыс. строк всего, отрабатывает менее полусекунды.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590193
SQL_Junior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый плюшевый мишка,

А вот и нет. Нужно по работе, иногда сталкиваюсь с необходимостью послать запрос. Изначально и думал решать данную проблему через подзапрос и обеднение. Но так как не очень уверен в своих знаниях, решил спросить профи. Надеялся что может есть более элегантное решение.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590208
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryAriochХотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHEREРазница большая - не возвращает сам volume.
Надо 2 таких подзапроса.

По постановке задачи возвращать value не надо.
А вот в твоем запросе будет дублировать одинаковых джонов и давидов.
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590211
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryС другими случаями группировки нет разницы

Это почему? Если мы часто ищем максимум(минимум), то вполне вероятно по этому полю есть индекс, и можно не вычитывать всю таблицу, а только крайнюю запись, видимую в транзакции.

После чего уже из этой записи вычитывать все столбцы

Т.е. разница может получиться "сплошное по порядку чтение всей таблицы" сравнительно с "индексным в случайном порядке чтением nn% записей"
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590213
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelba,

Где я сказал, что у тебя неправильно?

Ничего у меня не будет дублировать. Какой именно запрос из двух?
...
Рейтинг: 0 / 0
Запрос с группировкой
    #39590214
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЭто почему? Если мы часто ищем максимум(минимум), то вполне вероятно по этому полю есть индекс, и можно не вычитывать всю таблицу, а только крайнюю запись, видимую в транзакции.Во-первых, если индекс только по этому полю, то ORDER INDEX скорее всего будет хуже простого SORT.
Во-вторых, и по выражению индексы бывают
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос с группировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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