Решаем логическую задачу для школьников на SQL
Сумма возрастов Саши, Пети и Вити 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 пара вариантов… не совсем точный ответ. Почему то захотелось ответить точно, и имея хоть какие-то доказательства на руках.
Итак. Берем всех имеющихся клиентов в подручной базе с именами из задачи и их дни рождения:


Это будет немного напыщенная речь, но меня действительно раздражает софт, в котором люди пытаются изобрести очередной собственный язык запросов. У нас уже есть триллион различных ORM, еще триллион баз данных с собственным языком запросов каждая, и еще триллион SaaS-продуктов, для доступа к которым нужно освоить какой-нибудь очередной DSL, которые они придумали.







