بدأ كل شيء بالشاشة التالية في مجموعة الواتساب بالمحتوى التالي (الأصل ليس بالروسية ، لكن لا يهم):
مجموع أعمار ساشا وبيتي وفيتي يبلغ من العمر 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
حيث توجد
علامة تبويب على أي جهاز لوحي يحتوي على حوالي 100 سطر. الحل: 32 ، والذي رد عليه الزميل في المجموعة: "وكم عدد الأجهزة المنفردة؟" نزيل DISTINCT ونغير "+" إلى "،" ... وتبين أن 31 زوجًا من الخيارات ... ليست إجابة دقيقة تمامًا. لسبب ما كنت أريد الإجابة بالتأكيد ، ولدي بعض الأدلة على الأقل في متناول اليد.
لذا نأخذ جميع العملاء المتاحين في قاعدة البيانات في متناول اليد مع أسماء المهمة وأعياد ميلادهم:
WITH t AS (SELECT DISTINCT upper(NAME) NAME, to_date(birthdate, 'RRRRMMDD') dob FROM clients WHERE upper(NAME) IN ('', '', ''))
في الأصل ، تختلف الأسماء ، فمن الواضح أن قاعدة البيانات تحتوي على أسماء وفقًا لجواز السفر.نتواصل ثلاث مرات ونضيف الشروط التي يكون فيها مجموع أعمار ساشا وبيتيا 32 عندما يكون Vita 35 سنة:
SELECT v.dob vitya,
لكنني لم أفكر في حساب عدد العملاء مقدمًا ، وكما اتضح ، فادحًا جدًا. بالطبع ، كان هناك الكثير منهم ، ويتكاثر الجميع مع بعضهم البعض ، على الرغم من بعض الشروط ، يمكن للمرء أن ينتظر النتيجة إلى الأبد. بطريقة ما ، تحتاج إلى تقليل عدد الأسطر ، دعنا نقول إننا نترك الأسماء نفسها فقط. بعد إضافة الشروط ، تحول عدد الخيارات الممكنة إلى حوالي نصف مليون. أيضا ، تمت إضافة شروط أن العمر لا يمكن أن يكون سلبيا ، وكان هناك بعض الارتباك في تواريخ الميلاد في نفس اليوم ، لذلك قمت بتصحيح الدقة قليلاً. ولكن لا يزال هناك الكثير من النتائج.
بالفعل غير مشترك في المجموعة أنه كان يحاول إثبات شيء ما ، ولكن لم يأت شيء منه. اقترح أحد الزملاء البحث فقط عن العملاء الذين لديهم أبوي نادر. لم يعد هذا يناسب ظروف المشكلة ، ولكنه طرح الفكرة التالية.
لماذا لا تكون شخصيات المهمة اخوة؟ على سبيل المثال ليس حقيقة أنهم الإخوة ، لا يمكننا التحقق من ذلك ، ولكن الاسم نفسه مع نفس الأبوي - هذا أمر سهل. ربما لا يوجد أي شيء في قاعدة البيانات ، كان الأمر مخيفًا بعض الشيء ، ولكن بعد إضافة الشرط ، لا يزال الطلب يصدر 13000 خيارًا ممكنًا.
أدركت أنني كنت أضيع وقتي على جميع أنواع الهراء عديم الفائدة ، قبل أن أغادر كل شيء ، قررت التحقق من الأسماء الأخيرة والأبوية. وهنا ، مع الألقاب لا توجد مشاكل ، ولكن بدلاً من الاسم الأوسط على الصفحات التي لا نهاية لها من العينة كانت هناك شرطات. على سبيل المثال ترك الطلب أساسًا فقط العملاء الذين لم تكن أسماءهم الوسطى معروفة. بمجرد إضافة الشرط الأخير ، حصلت على 3 إدخالات فقط. هذه الشاشة بعبارة "من غير المحتمل أن تكون المهمة قد صيغت في الخمسينات ، وإذا غادرت عام 2001 فقط ، فإن الإخوة كانوا 35 ، 3 ، 29"
بالطبع ، كل هذا تعسفي للغاية ، ومن أجل المزحة ، ليس من الضروري أن تأخذ كل شيء على محمل الجد. يلهون قدر الإمكان ، نحن المبرمجين ...