Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Интересные задачи по SQL
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Наткнулся на очень интересный для SQLщиков(и профи, и новичков) ресурс. http://www[dot]sql-ex[dot]ru - вот такой.
Большая куча литературы с примерами, с разбором заковыристых запросов, всякие интересные замысловатые задачки по SQL и DML, по оптимизации, рейтинги, сертификаты. Вот.
OrmaJever
Отправлено: 03 Июля, 2011 - 19:38:10
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Спасибо! Всегда хотел sql подтянуть
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
komprenda
Отправлено: 05 Июля, 2011 - 17:00:00
Гость
Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011
Помог: 3 раз(а)
не работает
Champion
Отправлено: 05 Июля, 2011 - 18:07:38
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Да, что-то второй вечер уже сам зайти не могу. Они вроде на др. хостинг переезжают. (Добавление)
Ожили
LIME
Отправлено: 29 Сентября, 2011 - 22:06:07
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
чтото както многовато мне кажется
можно лучше решить? (Добавление)
а за ресурс спасибо!Отредактировано модератором: Champion, 30 Сентября, 2011 - 21:35:00 Удалил вещи, не предназначенные ля публикации
Champion
Отправлено: 30 Сентября, 2011 - 21:38:10
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Самое очевидное и ничем не плохое решение.
Только не стоит публиковать решения на сторонних форумах и точно так же не стоит публиковать формулировки задач. Особенно, когда речь пойдет о рейтинговых задачах.
Если есть вопрос, по задаче, его лучше задать в поддержку.
К тому же, раз задача решена, то доступно ее обсуждение - вот там можно опубликовать свое решение и полюбоваться другими
LIME пишет:
а за ресурс спасибо!
Это не мне спасибо)
LIME
Отправлено: 30 Сентября, 2011 - 21:41:34
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Champion неужели так серьезно? ))
ок ...я понял ... спасибо
Champion
Отправлено: 30 Сентября, 2011 - 21:50:36
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
LIME пишет:
Champion неужели так серьезно? ))
Ну за публикации рейтинговых задач полагается бан. Причем такие публикации, что интересно, отлавливаются весьма неплохо вместе с авторами
koras
Отправлено: 18 Декабря, 2011 - 11:57:17
Частый гость
Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009
Помог: 0 раз(а)
Не по теме сказано, но ресурс принадлежит моему очень хорошему другу. Сам ресур не приследует коммерческого интереса, все ради того чтобы принести пользу.
LIME
Отправлено: 19 Декабря, 2011 - 15:26:48
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
koras попроси друга починить регистрацию пжлст))
уже месяц наверное жду подтверждения (( (Добавление) korasотбой получилось востановление хотя подтверждения не было ))
EuGen
Отправлено: 09 Июня, 2012 - 11:34:23
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Дано: таблица со структурой id int(11), name varchar(255). Заполнена примерно таким образом:
Задача - не используя специальных средств СУБД (только доступные SQL-операторы и функции) сделать присоединение (JOIN) таблицы саму на себя, с тем, чтобы присоединенные строки встали в обратном порядке. То есть результат должен содержать следующее:
SELECT
l.id AS left_id,
l.name,
(SELECT COUNT(1) FROM sequences WHERE id<=left_id) AS left_order,
r.id AS right_id,
r.name,
(SELECT COUNT(1) FROM sequences WHERE id<=right_id) AS right_order
FROM
sequences AS l
LEFT JOIN
sequences AS r ON 1
HAVING
left_order+right_order=(1+(SELECT COUNT(1) FROM sequences));
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 09 Июня, 2012 - 12:31:31
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Вне конкурса, т.к. не удовлетворяю условию. Просто любопытны стали более штатные средства:
SELECT left_id, l.name, right_id, r.name FROM(SELECT id AS left_id,name, row_number() over (ORDERBY id ASC)AS l_id FROM tets)AS l JOIN((SELECT id AS right_id,name, row_number() over (ORDERBY id DESC)AS r_id FROM tets))AS r ON r_id=l_id;
SELECT left_id, l.name, right_id, r.name FROM(SELECT id AS left_id,lastname AS name, @rl:=@rl+1 AS l_id FROM test2 ORDERBY id ASC)AS l JOIN((SELECT id AS right_id,lastname AS name, @rr:=@rr+1 AS r_id FROM test2 ORDERBY id DESC))AS r ON r_id=l_id;
----- PostgreSQL DBA
Champion
Отправлено: 09 Июня, 2012 - 13:14:26
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
SELECT 0 n UNIONALLSELECT 1 UNIONALLSELECT 2 UNIONALLSELECT3/* ..... */
) t ON n <(SELECT count(*)FROM manager)
JOIN manager a2 ON a2.manager_id = substring(a1.gasc, n*5+1, 4)
JOIN manager a1 ON a1.manager_id = substring(a1.gdesc, n*5+1, 4);
group_concat / list / for xml path - есть практически везде, так что наверное им можно пользоваться. Количество юнионов зависит от количества строк, что не очень приятно. Хотя эту последовательность можно генерить. Вот такие минусы. Зато плюс: на моих данных (250 строк) Ваше решение выполняется 2.5с, а моё всего 0.167.
Вариант 2 - пронумеровать строки переменными и сджойнить (написал Мелкий).
Вариант 3 - пронумеровать подзапросом и также сджойнить. Сейчас напишу и померяю (Добавление)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.