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

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


Информационный Канал Subscribe.Ru

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

http://www.sql-ex.ru

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

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

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

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


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

§ На сайте появился форум по упражнениям DML и форум, на котором можно обсудить проблемы сертификации.

§ По предложению Cyrilus внесено уточнение в формулировку задачи 86. На прошедшие решения это никак не повлияет.

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

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

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

No Surname Number of
Sel_ex
Number of
DML_ex
Scores Days Days_2 Last_Solved Last_Visit
1 Зверев Д.Л. (dimzv) 136 17 274 252.92 2.219 14 Jul 2004 14 Jul 2004
2 Иткин И.Л. (joseph_itkin) 136 17 274 245.84 2.792 29 Oct 2004 08 Dec 2004
3 Якутин Н.В. (ZrenBy) 136 6 274 428.80 3.993 24 Jun 2004 16 Nov 2004
4 Сныткин В.Л. (vlad_snt) 136 17 274 96.10 6.470 07 Dec 2004 11 Dec 2004
5 Леденев С.А. (Shurgenz) 136 17 274 60.94 8.315 18 Oct 2004 03 Dec 2004
6 Михайлов В.Г. (mslava) 136 17 274 498.01 9.734 26 Oct 2004 26 Oct 2004
7 Spirin (spirin) 136 17 274 44.06 13.429 29 Sep 2004 06 Dec 2004
8 Валуев Д.И. (Fiolent) 136 17 274 293.15 19.314 23 Jun 2004 11 Dec 2004
9 Мельникова И.А. (Iris_m) 136 17 274 141.12 65.651 30 Sep 2004 09 Dec 2004
10 Карабанов А. (gipa) 133 0 268 138.58 5.022 10 Jul 2004 10 Jul 2004
11 Новиков Д.А. (DimaN) 130 0 264 68.17 2.104 01 Mar 2004 01 Mar 2004
12 Драконов Ф.А. (f_d) 130 0 264 36.32 7.243 03 Jun 2004 11 Nov 2004
13 Пятница О.А. (Robin) 128 17 259 589.55 70.834 06 Oct 2004 06 Oct 2004
14 Губарь Д.К. (DEathkNIghtS) 124 17 251 22.67 1.048 03 Nov 2004 03 Nov 2004
15 Смирнов А. (Leshich) 124 17 251 147.15 84.180 03 Aug 2004 19 Nov 2004
16 Ганя А.Д. (Sandman25) 123 1 248 154.83 3.130 16 Jun 2004 16 Jun 2004
17 сафрошкин В.Ю. (safervas) 123 14 248 102.29 80.143 26 Nov 2004 05 Dec 2004
18 Шулакова Н. (nshu) 121 0 244 81.03 5.468 28 Feb 2004 28 Feb 2004
19 Gershovich (VIG) 121 17 244 628.96 6.905 30 Nov 2004 11 Dec 2004
20 Митронин А.А. (mitronin) 120 9 241 405.96 2.150 09 Aug 2004 09 Aug 2004

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Кулицкий Д.С. (StrayCat) 49 49 83 0 83 319 10 Dec 2004
2 Симонов (comstels) 29 58 61 16 77 250 10 Dec 2004
3 Tokovenko (DailyGate) 28 28 49 26 75 555 08 Dec 2004
4 Трефилов (nt1338) 38 38 62 0 62 446 08 Dec 2004
5 Колодий В.А. (sirin) 14 64 31 23 54 186 10 Dec 2004
6 Lonski S.O. (sllon) 36 36 45 0 45 608 11 Dec 2004
7 Кузнецов Е.В. (john_ua1acc) 22 97 44 0 44 42 10 Dec 2004
8 Черемных В.П. (Sp999) 20 89 44 0 44 63 11 Dec 2004
9 Поляков В.Н. (hammer) 28 28 33 9 42 798 10 Dec 2004
10 Левин С.А. (slevin) 25 25 40 0 40 640 10 Dec 2004
11 Отдельный И.Н. (otdelnyi) 23 23 34 5 39 759 08 Dec 2004
12 >Hakobyan H.H. (hamlet) 15 117 36 0 36 24 11 Dec 2004
13 Пивоваров А.Г. (andreyp) 15 89 32 0 32 61 07 Dec 2004
14 Кардаильский З.А. (StarshoyST) 22 22 32 0 32 811 09 Dec 2004
15 satyricon E.T. (Zheka) 22 22 31 0 31 835 09 Dec 2004
16 Витовтов А.И. (alexmind) 21 21 29 0 29 898 08 Dec 2004
17 Кравченко С.Н. (Sergiore) 20 44 28 0 28 415 10 Dec 2004
18 Katz L. (lena5il) 20 20 27 1 28 932 08 Dec 2004
19 >Галиаскаров Э.Г. (edart) 7 69 19 7 26 113 11 Dec 2004
20 Олефиренко С.Ю. (swetalight) 15 15 17 9 26 1166 10 Dec 2004
21 Янютин Д.Е. (denyan) 11 34 24 1 25 481 10 Dec 2004
22 Пестровский А.Ю. (Marcell) 19 19 25 0 25 971 08 Dec 2004
23 >Шимановский К.В. (шаня) 21 21 25 0 25 976 11 Dec 2004
24 Поимцев С.Ю. (Monster) 5 109 15 9 24 27 10 Dec 2004
25 Рассказов А. (ra) 9 74 23 0 23 103 10 Dec 2004
26 Сафонов К.А. (skan) 18 18 23 0 23 1002 09 Dec 2004
27 Кувалкин К.С. (Cyrilus) 10 89 22 0 22 62 11 Dec 2004
28 Долгополов С. (chel_2000) 3 65 8 14 22 141 09 Dec 2004
29 Галич Н.Н. (Tantor) 9 34 19 3 22 480 10 Dec 2004
30 Палин К.С. (ghost32) 16 16 22 0 22 1040 07 Dec 2004
31 Счастливая О.В. (avgusta) 17 17 21 0 21 1053 10 Dec 2004
32 Кубович (Sakateka) 8 75 20 0 20 98 09 Dec 2004

Характерные ошибки при решении упражнений

SELECT

Задача 56
Для каждого класса определите число кораблей этого класса, потопленных в сражении. Вывести: класс и число потопленных кораблей.

Рассмотрим следующее решение этой задачи:

SELECT aa.class, SUM(aa.sunks) Sunks FROM
(
-- 1
SELECT c.class, COUNT(a.ship) sunks
   FROM outcomes a INNER JOIN ships b ON a.ship=b.name
        INNER JOIN classes c on b.class=c.class
    WHERE a.result='sunk'
    GROUP BY c.class
UNION
-- 2
SELECT c.class, COUNT(a.ship)
    FROM outcomes a INNER JOIN classes c ON a.ship=c.class
        WHERE a.result='sunk'
    GROUP by c.class
UNION
-- 3
SELECT c.class, 0 FROM classes c
) aa
    GROUP BY aa.class

В подзапросе объединяются три таблицы:

1. Класс и число потопленных кораблей, которые есть в таблице Ships.
2. Класс и число потопленных головных кораблей этого класса. Здесь уже есть "излишество", а именно: нет необходимости использовать группировку и соответственно функцию COUNT, т.к. у класса может быть только один головной корабль, да и потоплен корабль может быть только однажды.
3. Каждый класс с нулевым количеством потопленных кораблей. Это позволяет учесть те классы, которые не имеют потопленных кораблей и, следовательно, не попадают в предыдущие два набора записей.

Объединение с использованием UNION устраняет дубликаты, что, по мнению автора, позволяет корректно обработать ситуацию, когда потопленный головной корабль имеется и в таблице Ships. Наконец, выполняется группировка по классам с суммированием. При этом последний набор не даст вклада в окончательный результат, если в классе имеются потопленные корабли, что правильно.

Однако ошибка кроется в том, что объединяются двухатрибутные кортежи {класс, число потопленных кораблей}. Поэтому если в некотором классе (например, Бисмарк) имеется два потопленных корабля, причем головной корабль отсутствует в Ships, то объединяться будут два одинаковых кортежа

Бисмарк         1

И после устранения дубликатов мы получаем один потопленный корабль вместо двух.

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

Бисмарк          2

а второй

Бисмарк          1

В результате мы получим

Бисмарк          3

Хотя на самом деле корабля всего два.

§ Приведенные здесь примеры можно выполнить непосредственно на сайте, установив флажок "Без проверки" на странице с упражнениями на SELECT.

Контакты

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

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

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Отписаться

В избранное