#584. 寻找用户推荐人
https://leetcode-cn.com/problems/find-customer-referee/
给定表 customer ,里面保存了所有客户信息和他们的推荐人。
+------+------+-----------+| id | name | referee_id|+------+------+-----------+| 1 | Will | NULL || 2 | Jane | NULL || 3 | Alex | 2 || 4 | Bill | NULL || 5 | Zack | 1 || 6 | Mark | 2 |+------+------+-----------+
写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。
对于上面的示例数据,结果为:
+------+
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
+------+
# Write your MySQL query statement below
SELECT name
FROM customer
WHERE IFNULL(referee_id, 0)!= 2
#585. 2016年的投资
https://leetcode-cn.com/problems/investments-in-2016/
写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数。
对于一个投保人,他在 2016 年成功投资的条件是:
他在 2015 年的投保额 (TIV_2015) 至少跟一个其他投保人在 2015 年的投保额相同。
他所在的城市必须与其他投保人都不同(也就是说维度和经度不能跟其他任何一个投保人完全相同)。
输入格式:
表 insurance 格式如下:
| Column Name | Type |
|-------------|---------------|
| PID | INTEGER(11) |
| TIV_2015 | NUMERIC(15,2) |
| TIV_2016 | NUMERIC(15,2) |
| LAT | NUMERIC(5,2) |
| LON | NUMERIC(5,2) |
PID 字段是投保人的投保编号, TIV_2015 是该投保人在2015年的总投保金额, TIV_2016 是该投保人在2016年的投保金额, LAT 是投保人所在城市的维度, LON 是投保人所在城市的经度。
# Write your MySQL query statement below
SELECT ROUND(SUM(TIV_2016), 2) TIV_2016
FROM insurance
WHERE TIV_2015 IN
(
SELECT TIV_2015
FROM insurance
GROUP BY TIV_2015
HAVING COUNT(1)>1
)
AND CONCAT(LAT,LON) IN
(
SELECT CONCAT(LAT,LON) GEO
FROM insurance
GROUP BY GEO
HAVING count(1) = 1
)
#586. 订单最多的客户
https://leetcode-cn.com/problems/customer-placing-the-largest-number-of-orders/
+-----------------+----------+
| Column Name | Type |
+-----------------+----------+
| order_number | int |
| customer_number | int |
+-----------------+----------+
Order_number是该表的主键。
此表包含关于订单ID和客户ID的信息。
编写一个SQL查询,为下了 最多订单 的客户查找 customer_number 。
测试用例生成后, 恰好有一个客户 比任何其他客户下了更多的订单。
# Write your MySQL query statement below
SELECT customer_number
FROM Orders
GROUP BY customer_number
ORDER BY COUNT(DISTINCT order_number) DESC
LIMIT 1
#595. 大的国家
https://leetcode-cn.com/problems/big-countries/
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| name | varchar |
| continent | varchar |
| area | int |
| population | int |
| gdp | int |
+-------------+---------+
name 是这张表的主键。
这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
如果一个国家满足下述两个条件之一,则认为该国是 大国 :
面积至少为 300 平方公里(即,3000000 km2),或者
人口至少为 2500 万(即 25000000)
编写一个 SQL 查询以报告 大国 的国家名称、人口和面积。
按 任意顺序 返回结果表。
# Write your MySQL query statement below
SELECT name, population, area
FROM World
WHERE area>=3000000 OR population>=25000000
#596. 超过5名学生的课
https://leetcode-cn.com/problems/classes-more-than-5-students/
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| student | varchar |
| class | varchar |
+-------------+---------+
(student, class)是该表的主键列。
该表的每一行表示学生的名字和他们注册的班级。
编写一个SQL查询来报告 至少有5个学生 的所有类。
以 任意顺序 返回结果表。
# Write your MySQL query statement below
SELECT class
FROM Courses
GROUP BY class
HAVING count(student) >= 5
今日知识点
- ifnull 空值的处理
- concat函数:合并多个列
- order by + limit函数来求最大值
