Студенты интересовались недавно задачкой: какие натуральные числа можно разложить в сумму трех кубов натуральных чисел, а какие нельзя. Подумав немного, задачу я не решила. А потом оказалось, что им не абстрактно эта задача нужна, а нужно написать программку, которая по заданному числу будет его раскладывать (либо не раскладывать) в сумму трех кубов.
Ну, и я пошутила, что программа пишется за 2 часа, если это просто программка, а не извращение какое-то типа "составить sql-запрос". А придя домой подумала, а почему бы и не составить sql-запрос? На составление ушло минут 10, 9 из которых я вспоминала как правильно пользоваться CTE.
Вот запрос, который выводит таблицу всех разбиений чисел от 700 000 до 800 000.
with t as ( select 1 as a, 1 as a3 union all select a+1 as a, (a+1)*(a+1)*(a+1) as a3 from t where t.a<100 ) select a,b,c,S from ( select t1.a as a, t2.a as b, t3.a as c, t1.a3+t2.a3+t3.a3 as S from t t1 join t t2 on (t1.a<=t2.a) join t t3 on (t2.a<=t3.a) ) deccube where (s<800000) and (s>700000) order by s
Вобщем, я молодец. Почти как студентка.