|
|
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Таблица: Код: java 1. 2. 3. 4. 5. 6. Внутри order by допускается использование case, например: Код: plsql 1. Подскажите, пожалуйста, как работает данная сортировка? Причина вопроса - в столбце first_column помимо значения "1" имеется "2". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 01:58 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTTПодскажите, пожалуйста, как работает данная сортировка? Добавь это выражение в список select и увидишь возвращаемые им значения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 02:47 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Спасибо за комментарий. Добавлял. Именно по этой причине и возник вопрос. буду искренне рад, если опишите по шагам как работает сортировка с case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 02:57 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Таблица: 3 31 3 32 4 23 1 11 1 12 2 21 1 13 2 22 Я верно понял, что все строки, в которых first_column = 1 сортируются по second_column, а все строки, в которых first_column !=1 - по first_column? Если да, то в случае наличия в первом столбце "1" и отличных значений - получается, что блок с "1" в первом столбце может произвольно находится как перед остальными отсортированными значения "2", "3" и "4", так и после остальной отсортированной группы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 03:18 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
добавляется виртуальное поле с результатом case и по нему сортируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 03:34 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
SERG1257 Извините, не понял? В case указано 2 способа сортировки при различных условиях. Каким образом запрос определяет каким именно способом сортировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 04:36 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Сортировка идет по выражению которое вычисляется как результат case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 05:15 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTTВ case указано 2 способа сортировки при различных условиях. Каким образом запрос определяет каким именно способом сортировать?case - это не указание полей :-) Например, если вы будете сортировать по ПОЛЕ1+ПОЛЕ2, то это значит, что будет сортировка по числу - значению суммы полей, а не по полям ПОЛЕ1 и ПОЛЕ2 Вот и тут - расматривайте case как некую функцию, возвражающую значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 09:05 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
SERG1257 Результат выполнения запроса по последней таблице: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Если опираться на предикат, то если в таблице хотя бы одно значение first_column равно "1", то таблица должна сортироваться по столбцу second_column, в противном случае - по первому столбцу. Тем не менее, в последнем столбце отсутсвует подобная сортировка. Учитывая результат запроса создается ощущение, что все строки со значеним "1" в столбце first_column были отсортированы по столбцу second_column, а все строки с отличным от "1" значением в столбце first_column отсортированы по столбцу first_column. Получившиеся 2 группы сортировок объеденены в произвольном порядке, когда одна предшествует другой или наоборот. alexeyvg Несколько не понял вас. Если результат case один для всей таблицы, то тогда понятно, если для каждой строки применяется case - тогда вопрос каким обраом сортируются данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 13:49 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTTЕсли результат case один для всей таблицы, то тогда понятно, если для каждой строки применяется case - тогда вопрос каким обраом сортируются данные.case - это выражение, такое же как все остальные выражения. Оно может содержать в себе другие выражения и/или содержаться в других выражениях. Значения выражений в секции ORDER BY вычисляются для каждой строки и уже эти результаты сортируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 13:53 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTT alexeyvg Несколько не понял вас. Если результат case один для всей таблицы, то тогда понятно, если для каждой строки применяется case - тогда вопрос каким обраом сортируются данные.Замените в рассуждениях CASE на "+", может, так легче понять. SELECT поле1, поле2, поле1+поле2 AS [сумма полей] FROM таблица ORDER BY поле1+поле2 Вернёт: 1 2 3 2 2 4 1 4 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 17:49 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
alexeyvgTorchTTTT alexeyvg Несколько не понял вас. Если результат case один для всей таблицы, то тогда понятно, если для каждой строки применяется case - тогда вопрос каким обраом сортируются данные.Замените в рассуждениях CASE на "+", может, так легче понять. SELECT поле1, поле2, поле1+поле2 AS [сумма полей] FROM таблица ORDER BY поле1+поле2 Вернёт: 1 2 3 2 2 4 1 4 5То есть, ещё раз, CASE - это не выбор полей, это скалярное выражение, возвражающее одно значение некоторого типа, такая же функция, другие, например: экспонента, квадратный корень, конкатенация строки, получение дня недели из даты и т.п. Подумайте, если вы будете сортировать по квадратному корню из суммы полей: результат квадратного корня один для всей таблицы или применяется для каждой строки, и как в итоге бдет отсортировано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 17:54 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTT Dimitry Sibiryakov Спасибо за комментарий. Добавлял. Именно по этой причине и возник вопрос. буду искренне рад, если опишите по шагам как работает сортировка с case. Вычисляются значения выражений в ORDER BY ( в данном случае одно выражение - case when first_column = 1 then first_column else second_column end ) набор данных сортируется по значениям полученных выражений. Ты вероятно хотел написать не так, а Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 20:22 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Перечитал свои сообщения, имеюются логические опечатки и иногда путал сортировку по столбцу first_column и second_column MasterZiv Значение выражения Order by вычислется один раз для всей таблицы или для каждой строки отдельно? Если для всей таблицы - тогда должна быть сортировка по полю first_column, если для каждой строки в отдельности - другой способ. Нет, я не хотел писать два case) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 21:28 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
Благодарю всех за ответы. Вопрос решен. Алгоритм сортировки: Для каждой строки вычисляется значение case и, далее, таблица сортируется по этому значению. Пример сортировки таблицы Tabletemp (в столбце Case_Value приведено значение case для каждой строки, по которому и будет происходить сортировка): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2013, 21:59 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
TorchTTTT MasterZiv Значение выражения Order by вычислется один раз для всей таблицы или для каждой строки отдельно? Если для всей таблицы - тогда должна быть сортировка по полю first_column, если для каждой строки в отдельности - другой способ.Ужас. TorchTTTTДля каждой строки вычисляется значение case и, далее, таблица сортируется по этому значению.Ну так об этом много раз и сказали - по значению, а не по полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2013, 09:58 |
|
||
|
Case внутри order by
|
|||
|---|---|---|---|
|
#18+
MasterZiv Значение выражения Order by вычислется один раз для всей таблицы или для каждой строки отдельно? Это как один раз для всей таблицы, если они зависят от полей каждой записи? Если не зависят, могут вычисляются и один раз. Если для всей таблицы - тогда должна быть сортировка по полю first_column, если для каждой строки в отдельности - другой способ. Нет, я не хотел писать два case) Хотел, хотел... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2013, 11:04 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38477353&tid=1541058]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 126ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...