Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 202


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 202 (9 августа 2008 г.)

Новым посетителям сайта

SQL Exercises Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 54-х задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

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

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


Новости сайта

§ Теперь вы можете оценить задачу (второго этапа) по горячим следам, не покидая страницы с упражнениями.
Не пренебрегайте этой возможностью. Тогда у нас будет вполне демократичный подход к замене задач.

§ Учтя замечание GrImago, привел в соответствие временную оценку сложности задач второго этапа на графике и в рейтинге задач. Расхождение появилось в результате того, что в одном случае я забыл исключить время автора из среднего показателя.

§ В предверии Олимпиады продолжил вычищать из рейтингов наказанных за нарушение правил сайта, дабы они не смущали никого своими "допинговыми" результатами. :-)

§ Одна задача до третьего этапа осталась anddros (задач 137, время 2.829).

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
11. ABEgorov (140)
13. iglbeat (145)
34. Ozzy (139)

§ Новые лица в ТОР 100 и вернувшиеся туда:
58. mz (133, 30.920)

§ Продвинулись в рейтинге:
43. avk (136, 83.580)
45. Fencer (135, 208.835)
51. rage (134, 1.911) - третий результат на промежуточном этапе
52. Fomichev (134, 17.422)
57. Vendigo (133, 30.347)
66. Umrikhina (130, 3.198)
81. Eka (128, 12.251)
85. Rash ST (127, 7.967)
86. shadon (127, 23.270)
89. HandKot_ (127, 200.216)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
130. KRS (120, 3.316)
175. yoj (109, 8.506)

§ На этой неделе сертифицированы:
HandKot_ (B08006848) [AR]) - г.Сергиев Посад, Россия
Allgood (A08035362) [BK] - г.Балашиха, Россия
Romul_T (A08032270) [BK] - г.Новосибирск, Россия
_WildMage (A08032545) [BK] - г.Новосибирск, Россия
Umrikhina (B08032416) [AR]) - г.Новосибирск, Россия
Nnet (A08032290) [BK] - г.Новосибирск, Россия
Fencer (B08008795) [AR]) - г.Москва, Россия

§ Число подписчиков - 3804

Число участников рейтинга - 16713

Число участников второго этапа - 1479

Число участников третьего этапа - 35

Сертифицировано на сайте - 308

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Сальников С.А. ($erges) 147 147 21 357 118 2.842 3.359 31 23 Jun 2008 08 Aug 2008
2 Креславский О.М. (Arcan) 147 147 21 357 517 37.671 27.498 31 30 Jun 2008 08 Aug 2008
3 Карасёва Н.В. (vlksm) 147 147 21 357 778 73.340 46.383 31 22 Jun 2008 08 Aug 2008
4 Печатнов В.В. (pvv) 146 146 21 354 257 19.426 6.326 28 02 Jul 2008 08 Aug 2008
5 Держальцев В.А. (MadVet) 142 146 21 347 1128 60.815 28.482 28 18 May 2008 23 Jun 2008
6 Любченко В.А. (IAS56) 142 146 21 347 615 403.439 373.617 28 11 May 2008 08 Jun 2008
7 Голубин Р.С. (Roman S. Golubin) 144 145 21 348 1044 92.981 58.822 25 27 Jun 2008 05 Aug 2008
8 Nikolaenko A.V. (Shadow77) 145 147 21 349 349 37.317 14.010 23 27 Jul 2008 01 Aug 2008
9 Мурашкин И.В. (lepton) 144 146 21 347 839 37.289 26.815 21 09 Jul 2008 22 Jul 2008
10 Белогурова К. (Katy_Ekb) 138 143 21 335 361 10.714 4.673 18 20 May 2008 31 Jul 2008
11 Егоров А.Б. (ABEgorov) 143 140 21 344 180 12.917 8.815 18 03 Aug 2008 04 Aug 2008
12 Войнов П.Е. (pаparome) 143 146 21 343 1034 3.103 .213 17 23 Jun 2008 04 Aug 2008
13 >iglbeat (iglbeat) 143 145 21 343 360 34.601 15.225 17 08 Aug 2008 08 Aug 2008
14 Северюхин Ю.А. (Venser) 134 142 21 326 335 4.925 .655 14 01 Feb 2008 04 Feb 2008
15 Борисенков Д.В. (xuser) 137 142 21 331 92 3.217 .926 14 02 May 2008 30 May 2008
16 Мишин С.А. (CepbIu) 140 142 21 335 69 9.772 2.148 14 26 Jun 2008 01 Aug 2008
17 Тарасов Д.Б. (Gavrila) 141 142 21 337 1069 24.230 2.501 14 30 Jul 2008 01 Aug 2008
18 >Солдатенков Ю.С. (SolYUtor) 141 89 21 337 813 18.165 2.695 14 08 Aug 2008 08 Aug 2008
19 Кувалкин К.С. (Cyrilus) 135 142 21 327 1207 13.037 2.782 14 15 Mar 2008 07 Aug 2008
20 Шептунов П.П. (Dzen) 133 142 21 325 279 8.120 3.499 14 02 Oct 2007 15 Nov 2007

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Семчишин Ю.Б. (Seventh) 39 69 75 34 109 515 08 Aug 2008
2 >Лысиков М.Ю. (Ashton) 48 48 89 0 89 1948 08 Aug 2008
3 >Макаренко А. (AntMak) 34 35 63 19 82 2195 08 Aug 2008
4 >Поликарпов (s.pereira) 28 52 58 23 81 1128 08 Aug 2008
5 Kanunnikov S. (S_Kan) 39 39 75 3 78 2434 06 Aug 2008
6 Гуркин С.Л. (SGurkin) 29 38 61 9 70 2404 07 Aug 2008
7 Loshmanov N. (iNDRA The Storm-god) 22 33 48 19 67 2386 07 Aug 2008
8 >Петров И.В. (PSmith) 20 56 39 27 66 863 08 Aug 2008
9 Родионов В.А. (vital1) 33 38 66 0 66 2816 08 Aug 2008
10 Гневышев В. (Gnevyshev) 28 28 49 17 66 3068 07 Aug 2008
11 Zaikin A. (_Allex_) 11 70 24 34 58 505 08 Aug 2008
12 Коркуна О.О. (OstapKorkuna) 27 27 48 7 55 3919 08 Aug 2008
13 >Дрогин А. (Эгиль) 29 29 55 0 55 3927 08 Aug 2008
14 >Kiselev I. (darkman666) 13 68 25 26 51 631 08 Aug 2008
15 Глазырин Д.С. (glassman) 25 71 50 0 50 476 08 Aug 2008
16 Зайцев В.С. (Sleeping) 16 45 33 15 48 1095 07 Aug 2008
17 Stepanov A. (Stork) 21 32 47 0 47 3606 06 Aug 2008
18 иа (katrinqw) 20 26 40 0 40 4898 06 Aug 2008
19 Кравцов В. (SmartSQL) 16 30 39 0 39 3942 07 Aug 2008
20 >Нечаева О.А. (Nechaeva Olga) 14 59 21 15 36 785 08 Aug 2008
21 Synyuta Y.V. (Yura_Synyuta) 1 54 2 34 36 865 08 Aug 2008
22 >Арсентьев В. (HPValeriy) 12 36 26 10 36 1997 08 Aug 2008
23 >Сдыков Д.Ж. (dako) 14 30 36 0 36 3869 08 Aug 2008
24 belov (mbelov) 22 22 36 0 36 5925 07 Aug 2008
25 Рыжикова (zima) 21 21 35 0 35 6065 07 Aug 2008
26 >Флягин М.В. (PBA) 23 23 34 0 34 6217 08 Aug 2008
27 Панов Р.Р. (Ratmir) 21 21 33 0 33 6309 08 Aug 2008
28 >Колечкин С.А. (Fin da mix) 16 50 32 0 32 1711 08 Aug 2008
29 >Fetahu B.S. (Bfetahu) 20 20 31 0 31 6736 08 Aug 2008
30 >om (om2) 19 19 31 0 31 6756 08 Aug 2008

Изучаем SQL

Требования к SQL Server по усилению поддержки: предложение OVER() и упорядоченные вычисления (продолжение, начало в вып.195-199)

Itzik Ben-Gan и Sujata Mehta (оригинал: SQL Server Feature Enhancement Request - OVER Clause and Ordered Calculations )
Перевод Карасева Н.В.

РАЗДЕЛ 3: Поддержка предложения OVER() в SQL Server 2005 в настоящее время

В этом разделе рассматривается поддержка предложения OVER(), имеющаяся в SQL Server 2005 в настоящее время.

Сначала мы разберемя со спецификацией ANSI для этого предложения. Затем мы рассмотрим реализацию предложения OVER в SQL Server 2005 для различных типов функций с примерами, позволяющими увидеть, как в настоящее время это предложение упрощает решение задач некоторых типов.

Предложение OVER() основано на логической конструкции ANSI SQL, называемой окном. Окно представляет собой подмножество записей из результата запроса. Результирующий набор записей может быть разбит на группы строк, называемые разбиениями (partitions). Окно - это подмножество строк из разбиения, к которому можно применить аналитические функции, такие как функции ранжирования или агрегатные функции. Подмножество строк, принадлежащих окну внутри разбиения, может быть упорядочено логическим предложением ORDER BY. Это упорядочение не зависит от ORDER BY для представления результата, которое мы можем применить ко всему результирующему набору записей, если пожелаем. Далее множество строк в окне внутри разбиения может быть ограничено с помощью оконных конструкций ROWS/RANGE. Данная оконная конструкция динамически конфигурируется относительно текущей строки.

Синтаксис ANSI SQL для оконных функций с использованием предложения OVER:

Function (аргумент)         (оконная конструкция)
OVER ([PARTITION BY <...>] [ORDER BY <...>] [ROWS/RANGE<…>])

Здесь Function может быть ранжирующией функцей, как, например, ROW_NUMBER, RANK(); скалярной агрегатной функцией, как COUNT(), SUM(); или аналитической функцией другого типа, как LEAD,LAG и т.д.

Предложение OVER() состоит из трех элементов, которые и определяют окно:

PARTITION BY: подчиненное предложение PARTITION BY разбивает множество строк результирующего набора на группы, основываясь на значениях столбцов, перечисленных в списке предложения PARTITION BY.

ORDER BY: подчиненное предложение ORDER BY определяет логический порядок строк внутри каждого разбиения результирующего набора.

ROWS/RANGE: оконная конструкция, использующая предложения ROWS и RANGE для дополнительных ограничений на строки внутри разбиения, к которым применяется функция. Это делается путем задания диапазона строк относительно текущей записи, либо путем физической, либо логической ассоциации. Физическая ассоциация достигается использованием предложения ROWS. ROWS ограничивает строки внутри разбиения путем определения фиксированного числа строк, предшествующих текущей или следующих за ней. Предложение RANGE, напротив, может использоваться для того, чтобы логически ограничить строки внутри разбиения, указав диапазон значений в нужных строках по отношению к значению в текущей строке.

Оконные функции, реализованные в SQL Server 2005, основаны на ANSI SQL: 1999 OLAP Extensions/ANSI SQL: 2003.

SQL Server 2005 поддерживает некоторые из функции, использующих предложение OVER. Для разных типов функций, SQL Server 2005 поддерживает некоторые конструкции предложения OVER, но не все.

В таблице 3-1 отмечены конструкции, поддерживаемые SQL Server 2005 для различных типов функций.

Предложение OVER - реализация в SQL Server 2005
------------------------------------------------------------------------------
                           PARTITION BY         ORDER BY        ROWS/RANGE
                                                                Вспомогательное
                                                                предложение окна
------------------------------------------------------------------------------
Тип функции   Функция      Разбивает строки     Упорядочивает  Дополнительные
             (неполный     по группам, к        строки внутри  ограничения на
              список)      которым применя-     группы         строки в группе,
                           ется аналитическая                  специфицируемые
                           функция                             диапазоном строк
                                                               для применения
                                                               функции относительно
                                                               текущей записи
------------------------------------------------------------------------------
Аналитичес-  ROW_NUMBER        +                   +             N/A
кие функции  RANK               +                   +               N/A
ранжирования DENSE_RANK         +                   +               N/A
             NTILE              +                   +               N/A
------------------------------------------------------------------------------
Агрегатные   COUNT              +                   x               x
функции      SUM                +                   x               x
             AVG                +                   x               x
             MAX                +                   x               x
             MIN                +                   x               x
             Другие             +                   x               x
------------------------------------------------------------------------------
Другие      LAG                 х                   х               N/A
аналитичес- LEAD                х                   х               N/A
кие функции FIRST_VALUE         х                   х               х
            LAST_VALUE          х                   х               х
------------------------------------------------------------------------------
Другие      TOP                 х                   х               N/A
возможные   Прогрессивные       х                   х               х
применения  вычисления
предложения
OVER
------------------------------------------------------------------------------
Таблица 3-1.  Поддержка в SQL Server 2005 предложения OVER.
 + = поддерживается,   x = не поддерживается, N/A = неприменимо

Аналитические ранжирующие функции в SQL Server 2005:

SQL Server 2005 поддерживает 4 аналитические функции ранжирования (ROW_NUMBER, RANK, DENSE_RANK, и NTILE). Эти функции высокоэффективны в вычислениях, где требуется ранжирование. Для них поддерживаются дополнительные предложения PARTITION BY и ORDER BY. К функциям ранжирования не применимы конструкции окна ROWS/ RANGE, потому что ранги можно задать только по отношению ко всему разбиению.

Значение функции ранжирования - номера строк или ранги - есть целое число для каждой записи результирующего набора, зависящее от заданного порядка. Предложение OVER в запросе логически следует после всех соединений, фильтрации, предложений GROUP BY и HAVING. Поэтому функции ранжирования могут появиться только в предложениях SELECT или ORDER BY запроса. Общее представление функций ранжирования в том виде, в котором они поддерживаются в SQL Server 2005, таково:

<ранжирующая функция> OVER ([PARTITION BY <список_столбцов>] ORDER BY <список_столбцов>)

Вспомогательное предложение PARTITION BY разбивает строки результирующего набора по логическим группам на основе значений, содержащихся в списке столбцов, перечисленных в предложении PARTITION BY. Когда эта конструкция указана для оконной функции, функция применяется для каждой логической группы. Например, если следом за PARTITION BY стоит empid (ID работника), то результирующий набор разбивается на группы строк, соответствующих определенному значению empid, и ранжирующая функция применяется к каждой строке внутри группы. Если PARTITION BY отсутствует (оно не является обязательным), то весь результирующий набор записей рассматривается как одна группа.

Дополнительное предложение ORDER BY определяет логический порядок строк внутри каждой группы результирующего набора. Порядок может быть как по возрастанию, так и по убыванию. Функция ORDER BY является обязательной для функций ранжирования, поскольку сама концепция ранжирования изначально предполагает порядок.

(Продолжение следует...)

Полезная информация

§ Онлайновый выпуск рассылки можно почитать на сайте.

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
stumbleupon.com

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77[@]yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное