❤️博客主页: 楚生辉
❤️系列专栏:【LeetCode刷题】
❤️一句短话: 坚持不懈,孜孜不倦

1.题目描述

国家表:Countries

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| country_id    | int     |
| country_name  | varchar |
+---------------+---------+
country_id 是这张表的主键。
该表的每行有 country_id 和 country_name 两列。

天气表:Weather

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| country_id    | int     |
| weather_state | varchar |
| day           | date    |
+---------------+---------+
(country_id, day) 是该表的复合主键。
该表的每一行记录了某个国家某一天的天气情况。

写一段 SQL 来找到表中每个国家在 2019 年 11 月的天气类型。

天气类型的定义如下:当 weather_state 的平均值小于或等于15返回 Cold,当 weather_state 的平均值大于或等于 25 返回 Hot,否则返回 Warm。你可以以任意顺序返回你的查询结果。

查询结果格式如下所示:

Countries table:
+------------+--------------+
| country_id | country_name |
+------------+--------------+
| 2          | USA          |
| 3          | Australia    |
| 7          | Peru         |
| 5          | China        |
| 8          | Morocco      |
| 9          | Spain        |
+------------+--------------+
Weather table:
+------------+---------------+------------+
| country_id | weather_state | day        |
+------------+---------------+------------+
| 2          | 15            | 2019-11-01 |
| 2          | 12            | 2019-10-28 |
| 2          | 12            | 2019-10-27 |
| 3          | -2            | 2019-11-10 |
| 3          | 0             | 2019-11-11 |
| 3          | 3             | 2019-11-12 |
| 5          | 16            | 2019-11-07 |
| 5          | 18            | 2019-11-09 |
| 5          | 21            | 2019-11-23 |
| 7          | 25            | 2019-11-28 |
| 7          | 22            | 2019-12-01 |
| 7          | 20            | 2019-12-02 |
| 8          | 25            | 2019-11-05 |
| 8          | 27            | 2019-11-15 |
| 8          | 31            | 2019-11-25 |
| 9          | 7             | 2019-10-23 |
| 9          | 3             | 2019-12-23 |
+------------+---------------+------------+
Result table:
+--------------+--------------+
| country_name | weather_type |
+--------------+--------------+
| USA          | Cold         |
| Austraila    | Cold         |
| Peru         | Hot          |
| China        | Warm         |
| Morocco      | Hot          |
+--------------+--------------+USA 11 月的平均 weather_state 为 (15) / 1 = 15 所以天气类型为 Cold。
Australia 11 月的平均 weather_state 为 (-2 + 0 + 3) / 3 = 0.333 所以天气类型为 Cold。
Peru 11 月的平均 weather_state 为 (25) / 1 = 25 所以天气类型为 Hot。
China 11 月的平均 weather_state 为 (16 + 18 + 21) / 3 = 18.333 所以天气类型为 Warm。
Morocco 11 月的平均 weather_state 为 (25 + 27 + 31) / 3 = 27.667 所以天气类型为 Hot。
我们并不知道 Spain 在 11 月的 weather_state 情况所以无需将他包含在结果中。

2.代码实现

  • 方法一:使用CASE
select t1.country_name as 'country_name',
case when avg(t2.weather_state)<=15 then 'Cold'when avg(t2.weather_state)>=25 then 'Hot'else 'Warm'  END as 'weather_type'
from Countries t1 join Weather t2
where t1.country_id = t2.country_id and left(day,7) = '2019-11'
group by t1.country_id

group by 后面为优先考虑Weather 中的country_id ,并且最终的数据也是由Weather中的country_id决定的有哪些国家的数据

  • 方法二:巧妙使用IF嵌套
select country_name,
if(avg(weather_state)<=15,'Cold',if(avg(weather_state)>=25,'Hot','Warm')) as weather_type
from weather join countries
using(country_id)
where day like '2019-11%'
group by country_name

方法二还使用到了using的用法

using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条件。

select a.*, b.* from a left join b using(colA);
等同于:
select a.*, b.* from a left join b on a.colA = b.colA;

用过if和using以后再也不想用case when和on

【LC简单】1294. 不同国家的天气类型相关推荐

  1. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 24丨不同国家的天气类型【难度简单】​

    [未来的你,会感谢今天努力的你]每日两题,一难一易,每天进步一点点,可能会直接导致一场面试的成功,或工作的轻松搞定,从而升职加薪迎娶白富美,加油小伙伴!

  2. 天气api整理的最新天气类型汇总, 各种天气情况, 动态更新中

    免费的天气api接口, 没有调用次数.频率和IP限制, 数据同步中国天气网, 永久免费, 请放心使用! https://www.tianqiapi.com/ 天气类型数据地址 https://www. ...

  3. c语言的各种类型的指针,简单总结C语言中各种类型的指针的概念

    2016 这篇文章主要简单总结了C语言中各种类型的指针的概念,指针可以说是C语言本身所具有的最大特性,平时根据不同使用场合习惯地将其简单分类,需要的朋友可以参考下 C语言中有很多关于指针的使用,指针也 ...

  4. php 遍历目录函数,PHP 遍历指定目录所有文件函数的简单示例(可指定文件类型)...

    这篇文章主要为大家详细介绍了PHP 遍历指定目录所有文件函数的简单示例(可指定文件类型),具有一定的参考价值,可以用来参考一下. 对PHP遍历指定目录下所有文件函数,可指定文件类型感兴趣的小伙伴,下面 ...

  5. Android 实现简单当前时间点的天气情况(和风天气接口)

    今天闲来无事,通过和风天气接口实现了一个简单的获取当前时间点的天气情况,话不多说,直接给大家展示代码,功能是挺简单的, 1.获取数据的实体类: package wxc.com.weatheer;imp ...

  6. java char指针数组_简单总结C语言中各种类型的指针的概念

    C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念. 常量指针:首先它是一个指针,常量只是用来修饰指针的定语.其定义如下: ch ...

  7. python中浮点数能用乘法吗_简单讲解Python中的数字类型及基本的数学计算

    Python有四种类型的数字:1.整型 a = 2 print a 2.长整型 b = 123456789 print b 3.浮点数 c = 3.2E2 print c 4.复数 复数为实数的推广, ...

  8. 罗斯福国家森林树木类型识别

    第1关:初窥数据 import pandas as pd import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt ...

  9. 【LC简单】603. 连续空余座位

    ❤️博客主页: 楚生辉 ❤️系列专栏:[LeetCode刷题] ❤️一句短话: 坚持不懈,孜孜不倦 1.题目描述 表: Cinema +-------------+------+ | Column N ...

最新文章

  1. Nature综述——真菌的多样性:真菌的高通量测序及鉴定
  2. c#_List<T>(IEnumerable<T>)
  3. BugkuCTF-Misc:又一张图片,还单纯吗
  4. 项目遇到的问题以及解决
  5. IO-BufferedInputStream
  6. 机器学习:从入门到晋级
  7. PHP中表单没有问题但是$_FILES为空的解决办法
  8. android注解处理技术APT
  9. 基于node.js和oicq的qq机器人 制作回顾分析笔记
  10. 使用pyenv和virtualenv搭建python虚拟环境实践总结
  11. 个人网站怎么建设,个人网站建设流程
  12. 渥太华大学计算机科学,加拿大渥太华大学计算机科学CO-OP录取
  13. 基于thinkphp开源cms 对比
  14. 计算机工程制图箭头怎么画,cad中箭头画法
  15. 传感器响应时间与滤波器截止频率的关系
  16. 常用颜色RGB、灰度值
  17. 干货|Android免Root最全Hook插件(免Root Hook任意App)
  18. Qt小项目之txt文本替换
  19. 使用CStdioFile::ReadString来逐行读取文件
  20. m3u8链接加密源码

热门文章

  1. vs code 关闭保存自动格式化 formatonsave - vscode
  2. java语言:PAT(1002)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
  3. C语言 链表 Fire Emblem Echoes
  4. 一天测血压的最佳时间_一天二十四小时,什么时候身体时间测量血压最准确?...
  5. 苹果税遭重击!法院判决:App Store必须90天内开放第三方支付,苹果市值一夜蒸发5477亿...
  6. 启动docker步骤
  7. 知识表示学习与图嵌入综述
  8. IO流案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理
  9. uni-app自定义导航栏右侧做增加按钮并跳转链接
  10. 解决 .git 目录过大问题