一切始于whatsap组中的下一个屏幕,显示以下内容(原始语言不是俄语,但没关系):
Sasha,Petit和Viti的年龄总和为67岁。 维克多(Victor)在萨沙(Sasha)的年龄时,离Petit出生还有3年的时间。 Sasha和Petit的年龄总和是多少?显然,这项任务是针对学龄儿童的,但是在长时间解决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
选项卡是大约100行的任何平板电脑解决方案:32,小组中的同事回答:“分别有几行?” 我们删除DISTINCT并将“ +”更改为“,”。。。结果是31对选项……不是一个确切的答案。 由于某种原因,我想肯定地回答,并且至少要有一些证据。
这样啊 我们将手头数据库中所有可用的客户端以及任务的名称和他们的生日:
WITH t AS (SELECT DISTINCT upper(NAME) NAME, to_date(birthdate, 'RRRRMMDD') dob FROM clients WHERE upper(NAME) IN ('', '', ''))
在原始名称中,名称是不同的,很明显数据库包含根据护照的名称。我们连接三次,并添加条件,当Vita为35时,Sasha和Petya的年龄总和为32:
SELECT v.dob vitya,
但我没想到要提前计算客户数量,结果证明这是徒劳的。 当然,它们有很多,并且即使彼此之间存在某种条件,也可以彼此相乘,甚至可以永远等待结果。 某种程度上,您需要减少行数,也就是说,我们只留下同名文字。 添加条件后,可能的选项数量约为50万。 另外,还增加了年龄不能为负的条件,并且同一天的出生日期有些混乱,因此我对准确性进行了些微校正。 但是仍然有很多结果。
在小组中已经取消订阅他正在尝试证明某事,但是什么也没有。 一位同事建议只寻找顾客很少的顾客。 这不再适合问题的情况,但引发了以下想法。
为什么任务中的人物不是兄弟? 即 不是事实,那就是兄弟,我们无法验证这一点,但是具有相同的赞助人名称-这很容易。 也许数据库中什么都没有,这有点吓人,但是添加条件之后,请求仍然发出了13,000个可能的选项。
意识到自己在各种无用的废话上浪费时间,在离开一切之前,我决定检查自己的姓氏和名字。 在这里,使用姓氏没有问题,但是在示例的无尽页面上没有中间名,而是使用破折号。 即 该请求基本上只留下那些中间名未知的客户。 通过简单地添加最后一个条件,我只有3个条目。 屏幕上显示“任务不太可能在50年代制定,如果只留下2001年,那么兄弟分别是35、3、29”
当然,所有这些都是非常随意的,并且为了开个玩笑,没有必要认真对待所有事情。 尽我们所能,我们是程序员...