【Leecode-专项突破-SQL入门】day8

今天太忙了,回来有点困,加上题目也不难,长话短说吧~
一共 4 道题:4 简单
586.订单最多的客户

输入: 
Orders 表:
+--------------+-----------------+
| order_number | customer_number |
+--------------+-----------------+
| 1            | 1               |
| 2            | 2               |
| 3            | 3               |
| 4            | 3               |
+--------------+-----------------+
输出: 
+-----------------+
| customer_number |
+-----------------+
| 3               |
+-----------------+

编写一个SQL查询,为下了 最多订单 的客户查找 customer_number 。测试用例生成后, 恰好有一个客户比任何其他客户下了更多的订单。

select t.customer_number from(
select customer_number, count(customer_number) as customer_cnt
  from Orders group by customer_number
) t order by t.customer_cnt desc limit 1 ;

思路很简单,先通过排序,统计各个用户的订单总量,然后对子查询临时表按照订单总量逆序排序,取第一个即最大的订单数的ID。
511.游戏玩法分析 I

Activity 表:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1         | 2         | 2016-03-01 | 5            |
| 1         | 2         | 2016-05-02 | 6            |
| 2         | 3         | 2017-06-25 | 1            |
| 3         | 1         | 2016-03-02 | 0            |
| 3         | 4         | 2018-07-03 | 5            |
+-----------+-----------+------------+--------------+

Result 表:
+-----------+-------------+
| player_id | first_login |
+-----------+-------------+
| 1         | 2016-03-01  |
| 2         | 2017-06-25  |
| 3         | 2016-03-02  |
+-----------+-------------+

写一条 SQL 查询语句获取每位玩家第一次登陆平台的日期。
在这个逻辑中只要注意第一次这个关键字就好啦,直接贴上SQL:

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

1890.2020年最后一次登录

输入:
Logins 表:
+---------+---------------------+
| user_id | time_stamp          |
+---------+---------------------+
| 6       | 2020-06-30 15:06:07 |
| 6       | 2021-04-21 14:06:06 |
| 6       | 2019-03-07 00:18:15 |
| 8       | 2020-02-01 05:10:53 |
| 8       | 2020-12-30 00:46:50 |
| 2       | 2020-01-16 02:49:50 |
| 2       | 2019-08-25 07:59:08 |
| 14      | 2019-07-14 09:00:00 |
| 14      | 2021-01-06 11:59:59 |
+---------+---------------------+
输出:
+---------+---------------------+
| user_id | last_stamp          |
+---------+---------------------+
| 6       | 2020-06-30 15:06:07 |
| 8       | 2020-12-30 00:46:50 |
| 2       | 2020-01-16 02:49:50 |
+---------+---------------------+

编写一个 SQL 查询,该查询可以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集不包含 2020 年没有登录过的用户。返回的结果集可以按任意顺序排列。
思路和上一题一样,只不过这次多了一个筛选条件,其他的逻辑大同小异。

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

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

Employees table:
+--------+------------+---------+----------+
| emp_id | event_day  | in_time | out_time |
+--------+------------+---------+----------+
| 1      | 2020-11-28 | 4       | 32       |
| 1      | 2020-11-28 | 55      | 200      |
| 1      | 2020-12-03 | 1       | 42       |
| 2      | 2020-11-28 | 3       | 33       |
| 2      | 2020-12-09 | 47      | 74       |
+--------+------------+---------+----------+
#(emp_id, event_day, in_time) 是这个表的主键。
#该表显示了员工在办公室的出入情况。
#event_day 是此事件发生的日期,in_time 是员工进入办公室的时间,而 out_time 是他们离开办公室的时间。
#in_time 和 out_time 的取值在1到1440之间。
#题目保证同一天没有两个事件在时间上是相交的,并且保证 in_time 小于 out_time

Result table:
+------------+--------+------------+
| day        | emp_id | total_time |
+------------+--------+------------+
| 2020-11-28 | 1      | 173        |
| 2020-11-28 | 2      | 30         |
| 2020-12-03 | 1      | 41         |
| 2020-12-09 | 2      | 27         |
+------------+--------+------------+

编写一个SQL查询以计算每位员工每天在办公室花费的总时间(以分钟为单位)。 请注意,在一天之内,同一员工是可以多次进入和离开办公室的。 在办公室里一次进出所花费的时间为out_time 减去 in_time。
题目给了很多提示和条件,对解题很有帮助,可以直接写出SQL:

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

–每一份耕耘,每一份收获,今天没啥好总结的,题做百遍,其意自现嘿嘿
–早点休息了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值