SQLZoo白色圣诞自加入日期
假设我们有一个名为hadcet的数据集,该数据集具有以下格式的历史温度数据:SQLZoo白色圣诞自加入日期,sql,Sql,假设我们有一个名为hadcet的数据集,该数据集具有以下格式的历史温度数据: +------+----+------+------+------+------+------+------+------+------+------+------+------+------+ | yr | dy | m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 | m9 | m10 | m11 | m12 | +------+----+--
+------+----+------+------+------+------+------+------+------+------+------+------+------+------+
| 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年的所有日子、月份和年份
让我们把白色圣诞节定义为12月25日的温度低于零
写一个查询,显示一个人在童年每出生一年会经历多少次白色圣诞节。我们将童年定义为3岁到12岁(包括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
但是,查询不会在出现此问题4的网页上运行。这是问题的有效解决方案吗?这里有一个被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上的定义不一致:如果在12月21日至25日之间有一天平均气温低于零度,我们就宣布为白色圣诞节。您需要使用该规则来获得预期的结果