|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Arioch, с CTE всё-равно два селекта писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 12:25 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rdb_dev, да, но не копипастом, таблица упоминается только один раз ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 12:32 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rdb_dev, дело не в селектах, а в количестве фетчей. Такое написание позволяет сделать ровно один full scan таблицы. Но повышается требования к TempCacheLimit. Arioch, Для оконных функций необходимо сформировать окно, для чего требуется полностью выполнить запрос. После оконных функций выполняются только сортировка и ограничение результата с помощью FIRST/SKIP, ROWS или начиная с 3.0 согласно стандарту FETCH/OFFSET ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 12:34 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Симонов Денис, для обычных (не оконных) аггрегатов тоже надо вроде как полностью выполнить запрос, но тем не менее HAVING существует я по сути не могу уловить разницу, почему как кажется один и тот же фильтр нельзя наложить на оконный агрегат, но можно на неоконный тем более с CTE ты сам и показал, что технических ограничений нет, надо только обойти ограничения стандарты и получаем результат в один проход ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 12:40 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Симонов Денис, тут 21133707 у ТС'а новая вводная, с которой OVER не канает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:02 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
WildSeryArioch"А ещё под эту музыку мы можем делать ТАК!"Неее. Под эту музыку мы можем делать ТАК. Код: sql 1. 2. 3.
не получится, ибо текстом если, то "100" < "99" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:06 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rdb_dev, ТС-у я сразу ответил в третьем сообщении тут сама тема любопытная ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:07 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
AriochWildSeryпропущено... Неее. Под эту музыку мы можем делать ТАК. Код: sql 1. 2. 3.
не получится, ибо текстом если, то "100" < "99" Хотя, если достроить LPAD'ом, то.... но кэш может и лечь DD ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:10 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Arioch, тут можно спорить до бесконечности. Придумали вот так. HAVING появился задолго до того как придумали оконные функции. Собственно он для фильтрации по результатам оконных функций и не задумывался. Кроме того есть существенная разница. Агрегатные функции почти всегда уменьшают кардинальность итоговой выборки, а оконные функции добавляют результат в каждую запись выборки. Порядок выполнения SELECT запроса такой. 1. Чтение потоков, соединение, фильтрация (FROM, WHERE) 2. Группировка и вычисление агрегатных функций (если есть) 3. HAVING (если есть) 4. Вычисление выражений и подзапросов в предложении SELECT 5. Формирование окон и вычисление оконных функций (если есть) 6. UNION с другими потоками (если есть) 7. Сортировка (если есть) 8. Ограничение резалтсета FIRST ... SKIP (если есть) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:11 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rdb_dev, да мы уже не о ТСе. Он ответ получил как это сделать аж 3-мя способами. Продолжаем про оконные функции беседовать. Пока что народ плохо понимает как они работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:14 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Симонов Денис, на 2.5 есть еще способ в один проход. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:25 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rdb_dev, сейчас только заметил, что WildSery похожий способ уже предложил. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 13:27 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 14:13 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Хотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHERE ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 14:30 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
По-моему это уже третье задание от этого препода. В прошлый раз цены суммировали, что до того, уже не помню. Студеры форум по наследству друг другу передают. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 14:50 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, жалко, что решения не передают вместе с форумом ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 15:29 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
AriochХотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHEREРазница большая - не возвращает сам volume. Надо 2 таких подзапроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 15:30 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
AriochХотя, если достроить LPAD'ом, то.... но кэш может и лечь DDС другими случаями группировки нет разницы, и там, и там таблицу сортировки создавать. И вообще, мне не на чем замерить, но всё же однопроходная группировка, вдруг даже быстрее оконной функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 15:35 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Нашёл на чём попробовать. К сожалению, 600 тыс. строк всего, отрабатывает менее полусекунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 15:53 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, А вот и нет. Нужно по работе, иногда сталкиваюсь с необходимостью послать запрос. Изначально и думал решать данную проблему через подзапрос и обеднение. Но так как не очень уверен в своих знаниях, решил спросить профи. Надеялся что может есть более элегантное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 16:09 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
WildSeryAriochХотя нет, похоже - но по другомУ, тут подзапрос сразу в SELECT'e, а не в WHEREРазница большая - не возвращает сам volume. Надо 2 таких подзапроса. По постановке задачи возвращать value не надо. А вот в твоем запросе будет дублировать одинаковых джонов и давидов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 16:24 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
WildSeryС другими случаями группировки нет разницы Это почему? Если мы часто ищем максимум(минимум), то вполне вероятно по этому полю есть индекс, и можно не вычитывать всю таблицу, а только крайнюю запись, видимую в транзакции. После чего уже из этой записи вычитывать все столбцы Т.е. разница может получиться "сплошное по порядку чтение всей таблицы" сравнительно с "индексным в случайном порядке чтением nn% записей" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 16:28 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
rstrelba, Где я сказал, что у тебя неправильно? Ничего у меня не будет дублировать. Какой именно запрос из двух? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 16:29 |
|
Запрос с группировкой
|
|||
---|---|---|---|
#18+
AriochЭто почему? Если мы часто ищем максимум(минимум), то вполне вероятно по этому полю есть индекс, и можно не вычитывать всю таблицу, а только крайнюю запись, видимую в транзакции.Во-первых, если индекс только по этому полю, то ORDER INDEX скорее всего будет хуже простого SORT. Во-вторых, и по выражению индексы бывают ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2018, 16:31 |
|
|
start [/forum/topic.php?fid=40&msg=39589992&tid=1561262]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
5ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 327ms |
total: | 465ms |
0 / 0 |