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

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


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

Выпуск 298 от 12 июня 2010 г.

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

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

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

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

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


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

§ Сделал ник автора ссылкой на профиль. Просьба к авторам, которые готовы отвечать на вопросы по своим задачам, проверить зарегистрированный почтовый адрес. Его можно скрыть, чтобы использовать форму отправки почты с сайта и защититься от спама.

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
13. MadVet (151)
27. qwrqwr (140, 164)

§ Продвинулись в рейтинге:
73. Serg71 (127, 349.739)
75. Johnnymnemonic (127, 141.359)
77. Vladius (125, 30.942)
78. vtan (124, 116.498)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
164. Чих (94, 71.208)
173. shock (95, 36.911)
203. YodaS (100, 92.138)

§ На этой неделе сертифицированы:
Vladius (B10046859) [AR] - г. Санкт-Петербург, Россия

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

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

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

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

На обучающем этапе - 14645

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Карасёва Н.В. (vlksm)1 167 252 22 402 1479 131.989 94.864 79 24 May 2010 11 Jun 2010
2 Креславский О.М. (Arcan)1 167 252 22 402 1210 128.423 102.137 79 24 May 2010 11 Jun 2010
3 Зотов П.Г. (Ozzy)1 155 252 22 379 778 199.850 211.373 75 27 Apr 2010 11 Jun 2010
4 Сальников С.А. ($erges)1 161 252 22 389 813 7.829 7.297 72 19 May 2010 11 Jun 2010
5 Яцук А.А. (Faust_zp)1 153 252 22 375 1093 121.912 92.200 72 01 Feb 2010 22 May 2010
6 Дроздков А.Н. (anddros)5 160 78 22 384 734 8.416 8.273 68 31 May 2010 11 Jun 2010
7 Умрихина Е.В. (Umrikhina)1 139 252 22 342 488 41.244 47.336 59 25 Aug 2009 14 Apr 2010
8 Дубинский А.В. (_yizraor)8 148 252 22 359 671 67.232 28.051 55 31 Mar 2010 03 Jun 2010
9 Бойко Д.М. (Angellore)8 159 252 22 377 1021 923.468 211.050 54 24 May 2010 11 Jun 2010
10 Тарасов Д.Б. (Gavrila)9 152 100 22 360 1739 76.486 36.268 41 31 May 2010 11 Jun 2010
11 Сенкевич С.В. (GreyC)1 122 251 21 307 612 57.718 26.238 41 07 Oct 2009 01 Jan 2010
12 Селезнёв А.С. (Артём С.)1 119 251 21 299 444 47.221 34.492 41 25 Jan 2009 03 Mar 2009
13 Держальцев В.А. (MadVet)7 147 151 22 342 1880 75.265 40.343 37 09 Jun 2010 11 Jun 2010
14 Никотин В.М. (@Nikotin)1 123 251 21 304 471 8.335 3.704 35 11 Dec 2009 01 Jun 2010
15 >Орлов М.В. (Eagleoff)14 150 130 22 353 785 56.805 23.563 33 11 Jun 2010 11 Jun 2010
16 Мурашкин И.В. (lepton)1 115 251 21 284 1139 69.439 58.709 32 05 May 2009 18 Apr 2010
17 Печатнов В.В. (pvv)1 131 252 21 315 845 36.963 17.410 31 10 Feb 2010 30 May 2010
18 Шиндин А.В. (AlShin)10 131 251 21 313 498 26.251 418.630 30 28 Feb 2010 09 Mar 2010
19 Муллаханов Р.Х. (rem)9 125 251 22 304 649 14.598 20.041 29 20 Jun 2009 02 Feb 2010
20 Анисимов Д. (danilko)13 128 252 22 302 32 12.700 9.283 26 12 Aug 2009 17 Aug 2009

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Александров И. (alexi) 34 34 60 34 94 886 11 Jun 2010
2 >Епифанов Д. (Owen_sql) 30 36 57 31 88 835 11 Jun 2010
3 Заяц К.А. (ki11er) 24 24 45 22 67 1490 07 Jun 2010
4 >Антоненко А. (Talenor) 28 32 52 9 61 924 11 Jun 2010
5 Смирнов А.А. (Смирнов Алексей) 27 47 49 0 49 645 10 Jun 2010
6 Лапука Е. (lapuka) 5 11 11 34 45 1798 09 Jun 2010
7 >Рэу К.М. (rkm) 12 12 17 28 45 2000 11 Jun 2010
8 Богуш Д.Г. (masainai) 5 5 10 34 44 2303 10 Jun 2010
9 Protasenya E. (Iberriana) 14 20 23 20 43 1462 10 Jun 2010
10 >Абдулов Р.Н. (nameless_one) 20 32 40 0 40 1112 11 Jun 2010
11 Репнин А.С. (Fеniks) 6 10 9 31 40 2081 08 Jun 2010
12 >Шап Д. (Doaken) 3 3 6 32 38 2653 11 Jun 2010
13 петров А.С. (justtoxa) 2 64 5 32 37 456 10 Jun 2010
14 Сергеев Д.А. (Ethereal) 16 30 34 0 34 966 11 Jun 2010
15 Сахчинский К.С. (Consatantine) 0 16 0 34 34 1603 08 Jun 2010
16 Petrova V. (Варюша) 0 10 0 34 34 2155 10 Jun 2010
17 Ревотько А.А. (Ревотько_А) 0 7 0 34 34 2364 08 Jun 2010
18 Кормызов Е. (Swordsman) 0 4 0 34 34 2551 08 Jun 2010
19 Evtihiev N. (FreeEagle) 0 2 0 34 34 2746 10 Jun 2010
20 Караваева Т. (kart.kart) 0 0 33 33 3059 11 Jun 2010
21 Хайтин Ф.Д. (Xaer) 4 25 7 25 32 1141 10 Jun 2010
22 Гусев А.О. (Айяй) 0 0 32 32 2989 11 Jun 2010
23 Жуков А.С. (zhuckovas) 0 26 0 31 31 1113 11 Jun 2010
24 Винничек Е.А. (Damd) 0 10 0 31 31 1829 09 Jun 2010
25 Пахомчик А.И. (I7aXoM) 0 3 0 31 31 2435 08 Jun 2010
26 Макс А.О. (NastyaM) 0 2 0 31 31 2809 08 Jun 2010
27 Голубовский Д.С. (Strike) 6 6 16 15 31 3186 09 Jun 2010

Изучаем SQL

FLOAT

Моисеенко С.И.

Как-то в одной социальной сети спросили, как убрать концевые нули в десятичных числах. Это было связано с подготовкой некоего отчета, где денежные суммы конкатенировались с текстом. В постановке задачи указывалось ограничение на два десятичных знака.

Вот пример данных и требуемый результат:

дано    получить
0.00 0
10.00 10
2.50 2.5
100.00 100
11.33 11.33

Предлагались решения, построенные на разборе строки. Я тоже впал в подобную ересь :-) и предложил следующее решение.

SELECT num,
CASE WHEN CAST(num AS INT) = num
           THEN CAST(CAST(num AS INT) AS VARCHAR)
           WHEN CAST(num*10 AS INT) = num*10
           THEN LEFT(CAST(num AS VARCHAR), LEN(CAST(num AS VARCHAR)) - 1)
            WHEN CAST(num*100 AS INT)=num*100
            THEN CAST(num AS VARCHAR)
END fnum
FROM(
SELECT 0.00 as num
UNION ALL SELECT 10.00
UNION ALL SELECT 2.50
UNION ALL SELECT 100
UNION ALL SELECT 11.33
) X

Не знаю, сколько бы еще продолжалось обсуждение, если бы один участник дискуссии не заметил, что все проблемы решает приведение к типу данных FLOAT. Действительно,

SELECT num, CAST(num AS FLOAT) fnum
FROM(
SELECT 0.00 as num
UNION ALL SELECT 10.00
UNION ALL SELECT 2.50
UNION ALL SELECT 100
UNION ALL SELECT 11.33
) X

Однако при этом нужно помнить о приближенном характере данного типа, а именно о величине мантиссы в научном представлении числа.

В соответствии со стандартом, этот тип данных имеет аргумент - FLOAT(n), который может принимать значения от 1 до 53. SQL Server значения аргумента в диапазоне 1 - 24 трактует как 24, что соответствует точности 7 цифр, а в диапазоне 25 - 53 как 53, что соответствует точности 15 цифр. По умолчанию принимается значение 53.

Продемонстрируем сказанное следующим примером.

SELECT num,
CAST(num AS FLOAT(24)) num_24,
CAST(num AS FLOAT(53)) num_53
FROM(
SELECT 1234567.80 AS num
UNION ALL SELECT  12345678.90
UNION ALL SELECT 123456789012345.60
UNION ALL SELECT 1234567890123456.70
) x
 
num    num_24   num_53
1234567.80  1234568  1234567,8
12345678.90  1,234568E+07 12345678,9
123456789012345.60 1,234568E+14 123456789012346
1234567890123456.70 1,234568E+15 1,23456789012346E+15

MySQL (версия 5.0)

Не поддерживается преобразование к типу FLOAT.

PostgreSQL (версия 8.3.6)

Практически аналогичное поведение, за исключением того, что для параметра в диапазоне 1 - 24 точность составляет 6 цифр. Соответственно последние результаты будут выглядеть так:

num    num_24   num_53 
1234567.80  1.23457e+006 1234567.8
12345678.90  1.23457e+007 12345678.9
123456789012345.60 1.23457e+014 123456789012346
1234567890123456.70 1.23457e+015 1.23456789012346e+015

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

§ Приглашаем вас посетить Интерактивный учебник по SQL.
   Ресурс позиционируется как "справочное обеспечение" для сайта SQL-EX.RU, но может использоваться и независимо от него.

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

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

§ Хотите поддержать проект? Вот инструкция по применению.

Контакты

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

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

В избранное