#584. 寻找用户推荐人

https://leetcode-cn.com/problems/find-customer-referee/

给定表 customer ,里面保存了所有客户信息和他们的推荐人。

  1. +------+------+-----------+
  2. | id | name | referee_id|
  3. +------+------+-----------+
  4. | 1 | Will | NULL |
  5. | 2 | Jane | NULL |
  6. | 3 | Alex | 2 |
  7. | 4 | Bill | NULL |
  8. | 5 | Zack | 1 |
  9. | 6 | Mark | 2 |
  10. +------+------+-----------+

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 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

今日知识点

  1. ifnull 空值的处理
  2. concat函数:合并多个列
  3. order by + limit函数来求最大值