LeetCode MySQL 刷题条记 (八)

228 阅读3分钟

「4月日新计划更文活动」

题目:586. 订单最多的客户

+-----------------+----------+
| 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(customer_number) desc limit 1

题目:511. 游戏玩法分析 I

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
表的主键是 (player_id, event_date)。
这张表展示了一些游戏玩家在游戏平台上的行为活动。
每行数据记录了一名玩家在退出平台之前,当天使用同一台设备登录平台后打开的游戏的数目(可能是 0 个)。

需求

写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期

解析

select player_id ,min(event_date) as first_login   from Activity group by player_id

题目:1890. 2020年最后一次登录

+----------------+----------+
| 列名           | 类型      |
+----------------+----------+
| user_id        | int      |
| time_stamp     | datetime |
+----------------+----------+
(user_id, time_stamp) 是这个表的主键。
每一行包含的信息是user_id 这个用户的登录时间。

需求

编写一个 SQL 查询,该查询可以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。 返回的结果集可以按 任意顺序 排列。

解析

# Write your MySQL query statement below

select user_id , max(time_stamp) as  last_stamp from Logins where time_stamp>="2020-00-00 0:00:00"  and  time_stamp<="2020-12-31 23:59:59" group by user_id    
# Write your MySQL query statement below

select user_id , max(time_stamp) as  last_stamp from Logins where year(time_stamp)=2020 
group by user_id    

题目:1741. 查找每个员工花费的总时间

+-------------+------+
| Column Name | Type |
+-------------+------+
| emp_id      | int  |
| event_day   | date |
| in_time     | int  |
| out_time    | int  |
+-------------+------+
(emp_id, event_day, in_time) 是这个表的主键。
该表显示了员工在办公室的出入情况。
event_day 是此事件发生的日期,in_time 是员工进入办公室的时间,而 out_time 是他们离开办公室的时间。
in_time 和 out_time 的取值在11440之间。
题目保证同一天没有两个事件在时间上是相交的,并且保证 in_time 小于 out_time。

需求

编写一个SQL查询以计算每位员工每天在办公室花费的总时间(以分钟为单位)。 请注意,在一天之内,同一员工是可以多次进入和离开办公室的。 在办公室里一次进出所花费的时间为out_time 减去 in_time。

解析

# Write your MySQL query statement below

select event_day as day, emp_id,sum(out_time- in_time ) as total_time  from Employees 
group by event_day ,emp_id  

知识点

sum 函数

  • 定义:SUM()函数用于计算指定列中所有数值的总和
  • 语句格式:栗子🌰1741sum(out_time- in_time )
  • 注意⚠️:SUM()函数只能用于数值列,如果列中的数据类型不是数值类型,需要进行强制类型转换

max 函数

  • 定义:返回指定列中的最大值(一般用来找到最大数值或日期值)
  • 语句格式:栗子🌰1890max(time_stamp)
  • 注意⚠️:max()函数忽略列值为NULL的行,并且如果在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行

min 函数

  • 定义:返回指定列的最小值
  • 语句格式:栗子 🌰min(event_date)
  • 注意⚠️:MIN()函数忽略列值为NULL的行,并且如果在用于文本数据时,如果数据按相应的列排序,则MIN()返回最前面的行

year 函数

  • 定义:YEAR()函数用于从日期或日期/时间表达式中提取年份。
  • 语句格式:栗子🌰1890 year(time_stamp)=2020
  • 注意⚠️:YEAR()函数仅适用于日期或日期/时间数据类型,如果列的数据类型不是这些类型,则需要进行类型转换

count 函数

  • 定义:对表中行的数据进行计数(不管列表中包含的是NULL值还是非空值)(不忽略空值)
  • 语句格式SELECT COUNT(字段名) FROM 数据表
  • 注意⚠️:如果使用COUNT()函数计算表中行数,可以使用“”代替列名,但如果使用COUNT()函数计算特定列中的行数,则不能使用“”,而必须使用列名。