मान लें कि हमारे पास hadcet नामक एक डेटासेट है जिसमें प्रारूप में ऐतिहासिक तापमान डेटा है:

+------+----+------+------+------+------+------+------+------+------+------+------+------+------+
| yr   | dy | m1   | m2   | m3   | m4   | m5   | m6   | m7   | m8   | m9   | m10  | m11  | m12  |
+------+----+------+------+------+------+------+------+------+------+------+------+------+------+
| 2001 |  1 |   40 |   11 |    9 |  112 |   87 |  131 |  185 |  180 |  150 |  151 |   91 |   98 |
| 2001 |  2 |   77 |   32 |   -4 |  114 |   99 |  126 |  207 |  163 |  168 |  143 |   99 |   29 |
| 2001 |  3 |   52 |   66 |   -3 |   84 |  105 |  100 |  209 |  166 |  153 |  142 |   87 |   55 |
| 2001 |  4 |   50 |   57 |    5 |   69 |   72 |  130 |  219 |  151 |  134 |  139 |   90 |   73 |
| 2001 |  5 |   47 |   68 |   12 |   71 |   82 |  136 |  217 |  161 |  139 |  159 |   75 |   82 |
| 2001 |  6 |   43 |   83 |   57 |   90 |   76 |  135 |  201 |  173 |  141 |  142 |   95 |   46 |
| 2001 |  7 |   49 |   85 |   86 |   69 |   90 |  110 |  185 |  161 |  153 |  128 |  112 |   62 |

और इसी तरह, 1772 और 2017 के बीच के सभी दिनों, महीनों और वर्षों के लिए।

आइए "व्हाइट क्रिसमस" को 25 दिसंबर को शून्य से कम तापमान के रूप में परिभाषित करें।

एक प्रश्न लिखें जो दिखाता है कि एक व्यक्ति अपने बचपन के प्रति जन्म वर्ष के दौरान कितने सफेद क्रिस्मस का सामना करता है। हम बचपन को 3 और 12 के बीच होने के रूप में परिभाषित करेंगे, यह मानते हुए कि वे वर्ष की शुरुआत में पैदा हुए थे और अपने पहले क्रिसमस पर लगभग 1 वर्ष के थे। केवल उन वर्षों को दिखाएं जहां उस वर्ष पैदा हुए बच्चे ने 7 या अधिक व्हाइट क्रिस्मस का अनुभव किया होगा।

मैंने निम्नलिखित प्रश्न लिखा है:

SELECT 
    a.yr, 
    COUNT(DISTINCT b.yr) AS wcc
FROM 
    hadcet a
    JOIN hadcet b ON b.yr > a.yr + 2 AND b.yr < a.yr +11
WHERE b.m12 < 0 AND b.dy = 25 
GROUP BY a.yr 
HAVING wcc >= 7 

हालांकि, क्वेरी SQLZoo संपादक में इस समस्या वाले वेबपेज पर नहीं चलती है (समस्या #4 ) क्या यह समस्या का एक वैध समाधान है?

sql
1
zthomas.nc 3 फरवरी 2019, 21:07

1 उत्तर

सबसे बढ़िया उत्तर

यहाँ एक समाधान को SQLZoo द्वारा सही उत्तर के रूप में टैग किया गया है:

SELECT 
    x.yr,
    COUNT(y.yr) wcc
FROM (
    SELECT DISTINCT yr FROM hadcet
) x
LEFT JOIN (
   SELECT yr FROM hadcet WHERE dy >= 21 AND dy <= 25 GROUP BY yr HAVING SUM(m12 < 0) > 0
) y ON y.yr >= x.yr + 2 AND y.yr <= x.yr + 11
GROUP BY x.yr
HAVING COUNT(y.yr) >= 7

क्वेरी दो उपश्रेणियों का उपयोग करती है:

  • x अलग-अलग वर्षों को सूचीबद्ध करता है
  • y केवल सफेद क्रिसमस वर्ष का चयन करता है

फिर बाहरी क्वेरी बचपन के तर्क का उपयोग करके उपश्रेणियों में शामिल हो जाती है।

एनबी: आपकी पोस्ट में दी गई व्हाइट क्रिसमस की परिभाषा SQLZoo पर दी गई परिभाषा से मेल नहीं खाती है: हम एक व्हाइट क्रिसमस घोषित करते हैं यदि 21 और 25 दिसंबर के बीच शून्य से नीचे औसत तापमान वाला दिन होता है। अपेक्षित परिणाम प्राप्त करने के लिए आपको उस नियम का उपयोग करने की आवश्यकता है।

1
GMB 3 फरवरी 2019, 22:17