Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 order by  [new]
Karen__84
Member

Откуда:
Сообщений: 339
Добрый день . Я не могу понять почему оператор Order by работает после select .
23 май 11, 08:12    [10692122]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Karen__84,

Что значит "после", и как он должен работать, чтобы не вызывать у вас вопросов?
23 май 11, 08:50    [10692195]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Karen__84
Member

Откуда:
Сообщений: 339
сначало order by потом select
23 май 11, 08:54    [10692210]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Karen__84,

и какая в этом логика? что вы будете упорядочивать, когда еще неизвестно что выбрано?
23 май 11, 08:56    [10692218]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Karen__84
сначало order by потом select

При выборке из многомиллионной таблицы 10ти записей, сначала ее отсортируем, а потом выберем эти 10-ть записей?
23 май 11, 08:59    [10692225]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Например union all, что можно сортировать до выборки, другое дело select top
Смотреть надо план выполнения.
23 май 11, 09:10    [10692256]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Anatoly Podgoretsky
Например union all, что можно сортировать до выборки, другое дело select top
Смотреть надо план выполнения.
Логически порядок такой:Раздел "Порядок обработки инструкции SELECT".
В UNION ALL сортировки в каждом SELECTе нет,
потому что там допускается только конструкция TOP ... ORDER BY
В этой конструкции ORDER BY не упорядочивает, а служит для определения записей, входящих в TOP.
23 май 11, 09:26    [10692322]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Karen__84
Member

Откуда:
Сообщений: 339
Есть таблица create table TT (id int primary key,Age int)
insert into TT (Age) values(1)
insert into TT (Age) values(7)
insert into TT (Age) values(3)
insert into TT (Age) values(16)
insert into TT (Age) values(8)

мне надо выбрать третий максимум
я пишу так

select max(Age) from (select top 3 Age from TT order by Age desc) X

скажите пожалуйста в X -Е сначало работает order by или select?
23 май 11, 11:11    [10692839]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Без разницы, результат получишь правильный.
23 май 11, 11:28    [10692954]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
Karen__84

скажите пожалуйста в X -Е сначало работает order by или select?

А в плане выполнения разве не видно что за чем выполняется ?
23 май 11, 11:29    [10692962]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Karen__84
Member

Откуда:
Сообщений: 339
как посмотреть в плане выполнения
23 май 11, 11:46    [10693108]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
Karen__84
как посмотреть в плане выполнения

Открыть хелп
Найти статью Execution Plan How-to Topics
Прочитать
Использовать полученные знания
23 май 11, 11:54    [10693184]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Karen__84
Есть таблица create table TT (id int primary key,Age int)
insert into TT (Age) values(1)
insert into TT (Age) values(7)
insert into TT (Age) values(3)
insert into TT (Age) values(16)
insert into TT (Age) values(8)

мне надо выбрать третий максимум
я пишу так

select max(Age) from (select top 3 Age from TT order by Age desc) X

скажите пожалуйста в X -Е сначало работает order by или select?
У Вас здесь нет ORDER BY!
Я ж Вам писал уже.
Правда, САМЫЙ ВНЕШНИЙ TOP ... ORDER BY ещё и отсортировал бы.
Но только в последнюю очередь после самого внешнего SELECTа. И это не Ваш случай.

Вот этот Ваш подзапрос в просторечии Microsoft ласково называет "DERIVED TABLE".
И как и любая другая TABLE она содержит МНОЖЕСТВО записей.
А любое множество неупорядочено по определению.
23 май 11, 12:58    [10693795]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Karen__84,

В данном случае вас ведь интересует логический порядок? так что впринципе вам можно и не смотреть в план выполнения...
В вашем запросе, сначала выполнится внутренний подзапрос, потом из его результатов отберется максимальный, т.е. максимум из максимумов, что логично будет просто максимум, т.е. 16.
Для ваших данных вам надо получить третий максимум, т.е. 7?
если да, то выбирайте минимальный из трех, либо еще раз запрос с топ.
select min(Age) from (select top 3 Age from TT order by Age desc) X
select top 1 Age from (select top 3 Age from TT order by Age desc) X order by Age
просто ошиблись в логике, наверное. порядок тут ни при чем...
23 май 11, 13:00    [10693810]     Ответить | Цитировать Сообщить модератору
 Re: order by  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Karen__84
Есть таблица create table TT (id int primary key,Age int)
insert into TT (Age) values(1)
insert into TT (Age) values(7)
insert into TT (Age) values(3)
insert into TT (Age) values(16)
insert into TT (Age) values(8)

мне надо выбрать третий максимум
я пишу так

select max(Age) from (select top 3 Age from TT order by Age desc) X

скажите пожалуйста в X -Е сначало работает order by или select?

Вы так вы выбираете просто максимум, а надо так
create table TT (id int identity(1,1) primary key,Age int)
go

insert into TT (Age) values(1)
insert into TT (Age) values(7)
insert into TT (Age) values(3)
insert into TT (Age) values(16)
insert into TT (Age) values(8)


select min(Age) from (select top 3 Age from TT order by Age desc) X
go

drop table TT 
go
23 май 11, 13:00    [10693812]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить