🎉欢迎您来到我的MySQL基础复习专栏
☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:力扣刷题讲解-MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️
目录
🚀大的国家
🚀超过5名学生的课
🚀大的国家
World
表:+-------------+---------+ | Column Name | Type | +-------------+---------+ | name | varchar | | continent | varchar | | area | int | | population | int | | gdp | bigint | +-------------+---------+name是该表的主键(具有唯一值的列)。 这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
如果一个国家满足下述两个条件之一,则认为该国是 大国 :
- 面积至少为 300 万平方公里(即,
3000000 km2
),或者 - 人口至少为 2500 万(即
25000000
)
编写解决方案找出 大国 的国家名称、人口和面积。
按 任意顺序 返回结果表。
返回结果格式如下例所示。
示例:
输入: World 表: +-------------+-----------+---------+------------+--------------+ | name | continent | area | population | gdp | +-------------+-----------+---------+------------+--------------+ | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | | Albania | Europe | 28748 | 2831741 | 12960000000 | | Algeria | Africa | 2381741 | 37100000 | 188681000000 | | Andorra | Europe | 468 | 78115 | 3712000000 | | Angola | Africa | 1246700 | 20609294 | 100990000000 | +-------------+-----------+---------+------------+--------------+ 输出: +-------------+------------+---------+ | name | population | area | +-------------+------------+---------+ | Afghanistan | 25500100 | 652230 | | Algeria | 37100000 | 2381741 | +-------------+------------+---------+
我自己的评价,这题算是刷了这么多天MySQL中最简单的一题了,根本不绕弯子,直接刚
代码如下:
select name, population, area from world where area > 3000000 or population > 25000000
🚀超过5名学生的课
表:
Courses
+-------------+---------+ | Column Name | Type | +-------------+---------+ | student | varchar | | class | varchar | +-------------+---------+ 在 SQL 中,(student, class)是该表的主键列。 该表的每一行表示学生的名字和他们注册的班级。
查询 至少有5个学生 的所有班级。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入:
Courses table:
+---------+----------+
| student | class |
+---------+----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+----------+
输出:
+---------+
| class |
+---------+
| Math |
+---------+
解释:
-数学课有6个学生,所以我们包括它。
-英语课有1名学生,所以我们不包括它。
-生物课有1名学生,所以我们不包括它。
-计算机课有1个学生,所以我们不包括它。
很显然用分组就能解决
1.先分组
2.再用having过滤
3.having里有一个聚合函数count去统计每一组的人数>= 5
4.这里的难点就是不要陷进用where去过滤
5.where是不能和聚合函数一起的
6.代码如下
SELECTclass
FROMcourses
GROUP BY class
HAVING COUNT(student) >= 5
;
当然你要用where也可以!!
首先,我们可以统计每个班级的学生数量。然后选择学生数大于 5 的班级。
要获得每个班级的学生数,我们可以使用 GROUP BY 和 COUNT,这在根据表中的某些字符进行统计时非常常用。
SELECTclass, COUNT(student) FROMcourses GROUP BY class ;
结果是下面这样的
class COUNT(student)
Biology 1
Computer 1
English 1
Math 6为了继续,我们可以通过将上面的查询作为子查询来过滤班级。
SELECTclass FROM(SELECTclass, COUNT(student) AS numFROMcoursesGROUP BY class) AS temp_table WHEREnum >= 5 ;
注意:给 COUNT(student) 添加一个别名 (在这里是'num') ,这样您可以在 WHERE 子句中使用它,因为它不能直接在那里使用。
作者:力扣官方题解
链接:https://leetcode.cn/problems/classes-more-than-5-students/solutions/2366294/chao-guo-5ming-xue-sheng-de-ke-by-leetco-l4es/
来源:力扣(LeetCode)