|
|
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
hi all Дано: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Result:IKK2122232552 Теперь предположим, что мне НЕ нужен в итоговой выборке столб " K ", и при этом: 1) группировка должна быть сохранена по тем же полям (i,k) 2) результат min()over() должен быть обозван именем исключенного сейчас столбца, т.е. так же: " K ". Запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. - выдаст: "Cannot use an aggregate function in a GROUP BY clause." Его аналог в M$ SQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. Кто не прав, мы или они ? (я не уверен ни в том ни в другом варианте ответа, потому и спрашиваю). PS. Оконная функция на самом деле ни при чём, вот так тоже выругается, и именно из-за "нехорошего алиаса" столбца: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. PPSВопрос, наверное, относится к соблюдению стандарта SQL, но спросить решил тут: в "Срачнении СУБД" ответы будут малоадекватными, КМК... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 18:38:52 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Ты пытаешься сделать фактически вот это: group by 1,2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 18:50:11 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
ТаблоидОконная функция на самом деле ни при чём, вот так тоже выругается, и именно из-за "нехорошего алиаса" столбца Этот вариант точно не по стандарту. А вот с оконными функциями КМК ничего противозаконного быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 18:51:02 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
WildSeryТы пытаешься сделать фактически вот это: group by 1,2да. И что ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 18:57:35 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, А выдачу какого сообщения об ошибке ты ожидаешь? Или ты вообще не считаешь, что тут ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 19:03:32 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
WildSeryА выдачу какого сообщения об ошибке ты ожидаешь? Или ты вообще не считаешь, что тут ошибка?я *НЕ* уверен, что ФБ делает правильно, вещая об ошибке. Ибо поменяв алиас столбца на что-то другое, например, на 'N', сообщения уже не будет. Алиас столбца никак не должен учитываться в group by, он используется ПОСЛЕ этой операции, когда данные уже идут "дальше", на след. итерацию запроса (т.е. на конечный select или на очередную CTE И проч) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 19:25:34 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, сортировка/группировка по алиасу - нестандартная фича ФБ, в данном случае она мешает тебе, но от этого не перестает быть фичей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 20:15:20 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
dimitrсортировка/группировка по алиасу - нестандартная фича ФБ, в данном случае она мешает тебе, но от этого не перестает быть фичейЭту "нестандартную фичу " лучше бы назвать просто: несоответствие стандарту. Объяснение на тему, что должно входить в group by, я нашёл только в тексте стандарта-99 (в 2003 и 2006 разобрать нереально) - см. скрин в аттаче. Кроме того, в книге "Joe Celko. SQL for Smarties. Advanced SQL Programming. 3rd.Edition" (ISBN 0123693799) на странице 319 русским по белому сказано: Celko, 319Standard SQL does not allow you to use the name of a calculated column such as "(salary + commission) AS total_pay" in the GROUP BY clause, because that column is computed and named in the SELECT clause of this query. It does not exist yet. However, you will find products that allow it because they create a result table first, using names in the SELECT clause, then fill the result table with rows created by the query. Из FB-доки следует, что эта "фича" была введена в 2.0 (" In addition to column names, Firebird 2 allows column aliases, column positions and arbitrary valid expressions as GROUP BY items. "). Может, есть смысл добавить там, что сиё есть отклонение от стандарта ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 00:38:34 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
ТаблоидЭту "нестандартную фичу " лучше бы назвать просто: несоответствие стандарту. это наше сознательное дополнение к стандарту, сделанное специально по просьбам трудящихся. Но ты можешь называть как хочешь, разрешаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 08:26:07 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидЭту "нестандартную фичу " лучше бы назвать просто: несоответствие стандарту. это наше сознательное дополнение к стандарту, сделанное специально по просьбам трудящихся. Но ты можешь называть как хочешь, разрешаю.я в итоге этого изврата этой "просьбы трудящихся" не могу сверить с m$ sql несколько весьма интересных вариантов :'( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 08:30:51 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, Не получается заниматься этим на лыжах в гамаке? Ну ок, попробуй взять сноуборд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 09:59:04 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
WildSeryпопробуй взять сноуборд.Очень глубокая фраза, спасибо. Ещё бы понять, к чему ты её тут вдвинул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 12:44:06 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, Может, сравнение не совсем удачное, но мне так показалось. Создаёшь какую-то надуманную позицию (и всё-таки в гамаке!), чтобы сверить её с MSSQL, в котором в этом месте почему-то нет отклонения от стандарта, или оно в другую сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 15:32:32 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
WildSeryСоздаёшь какую-то надуманную позицию (и всё-таки в гамаке!), чтобы сверить её с MSSQLЭта позиция "надумана" не мной. Для тестирования ФБ-3 надо скармливать ему некое множество запросов, подчас - сверхнавороченных, и сверять с ms_sql-вариантом: 1) данные релалтсета 2) произв-сть. По пункту "1)" могу сказать, что выловил уже несколько багов (они пофиксены были еще осенью). И никогда бы их не нашёл, если бы сверял только "обычные запросы", которые в нашем продакшене, скажем. А по пункту "2)" говорить ничего не буду. Грустно там всё на сегодняшний день... :'( WildSeryв котором в этом месте почему-то нет отклонения от стандарта, или оно в другую сторону. В этом месте у MS SQL (и у орацла тоже) НЕТ его, отклонения. Ни в какую "другую сторону". А вот то, что у них строки соединяются "+" - задолбало сильно. Иногда сразу видно, где реплейс надо делать, а иногда вглядываться приходится: ИБЭ не указывает это место. Ну, и convert() достаёт по самое не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 15:45:34 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, вариант Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 15:58:56 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: sql 1. работаетя понял, псип! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 16:06:52 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, что там по производительности. Приведи пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 16:25:03 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Симонов Денисчто там по производительности. Приведи примерУвы, не имею права эти запросы приводить. Это с sql-ex.ru, смотрю их в форумах решенных мной задач. Надо будет тестовые базы оттуда полностью переделать, алиасы столбов поменять, да и сами запросы тоже рихтануть как следует. А это время. Но по многим вариантам мы проигрываем в десятки раз. Особливо где есть full join'ы, да и outer join'ы в MS SQL могут быть выполнены через HJ, а у нас - пока что нет. Причём, ФБ проверяю на мощном линух-серваке, а маздай - на PC-чахотке. ЗЫ. Утешительный приз: если в запрос числа счастливых билетов, который по сути есть кросс-джойн, искуственно добавить дебилоидные условия соединения типа 'on c1.i*0 = c2.i*0' и только после них - where с суммами цифр, то ФБ начнёт делать его HASH join'ом. И это будет быстрее NL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Trace: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Против прежних 166859 ms при NL. Это - сравнение ФБ с ФБ, не с маздаем: тут он нам проиграл ( на чахотке, впрочем :)) Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 17:01:06 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Таблоид, я думал ты про оконные функции. Я кстати тут вижу пока один большой недостаток. в FB не реализовано кадрирование. ТаблоидЗЫ. Утешительный приз: если в запрос числа счастливых билетов, который по сути есть кросс-джойн, искуственно добавить дебилоидные условия соединения типа 'on c1.i*0 = c2.i*0' и только после них - where с суммами цифр, то ФБ начнёт делать его HASH join'ом. ждём применения патча от ДЕ с материализацией DT. Помниться в одном из обсуждений тест с подсчётом счастливых билетов просто летал. Насколько я понял HASH JOIN для outer joinов в тройке ждать не стоит, но возможно они появятся в 3.x, где x>0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 17:50:18 |
|
||
|
Cannot use an aggreg function in a GROUP BY при замене алиаса столба на 1 из группируемых
|
|||
|---|---|---|---|
|
#18+
Симонов Денися думал ты про оконные функции. Я кстати тут вижу пока один большой недостаток. в FB не реализовано кадрирование.хорошо, что глючить перестали (left_тьфу*3): сужу по большому кол-ву сверенных с маздаем результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 18:20:54 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38572331&tid=1563848]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
212ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 515ms |

| 0 / 0 |
