Решаем логическую задачу для школьников на SQL
2 мин
Все началось с очередного скрина в группу whatsap со следующим содержанием (оригинал не на русском языке, но это не важно):
Сумма возрастов Саши, Пети и Вити 67 лет. Когда Витя был в возрасте Саши оставалось еще 3 года до рождения Пети. Какова сумма возрастов Саши и Пети?
Ясно, что задача для школьников, но после долгих часов решения задач на SQL-EX (кстати, спасибо им больше за качественные и интересные задачи) первое что приходит в голову, это:
Где tab это любая табличка с количеством строк около 100. Решение: 32, на что в группе коллега отреагировал: «А по отдельности им по сколько?». Убираем DISTINCT и меняем "+" на ","… получается 31 пара вариантов… не совсем точный ответ. Почему то захотелось ответить точно, и имея хоть какие-то доказательства на руках.
Итак. Берем всех имеющихся клиентов в подручной базе с именами из задачи и их дни рождения:
Сумма возрастов Саши, Пети и Вити 67 лет. Когда Витя был в возрасте Саши оставалось еще 3 года до рождения Пети. Какова сумма возрастов Саши и Пети?
Ясно, что задача для школьников, но после долгих часов решения задач на SQL-EX (кстати, спасибо им больше за качественные и интересные задачи) первое что приходит в голову, это:
SELECT DISTINCT r2 + r3
FROM (SELECT rownum r1 FROM tab) r1
CROSS JOIN (SELECT rownum r2 FROM tab) r2
CROSS JOIN (SELECT rownum r3 FROM tab) r3
WHERE r1 + r2 + r3 = 67 AND r1 - r2 = r3 + 3Где tab это любая табличка с количеством строк около 100. Решение: 32, на что в группе коллега отреагировал: «А по отдельности им по сколько?». Убираем DISTINCT и меняем "+" на ","… получается 31 пара вариантов… не совсем точный ответ. Почему то захотелось ответить точно, и имея хоть какие-то доказательства на руках.
Итак. Берем всех имеющихся клиентов в подручной базе с именами из задачи и их дни рождения: