601. 体育馆的人流量

X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号 (id)、日期 (date)、 人流量 (people)。

请编写一个查询语句,找出高峰期时段,要求连续三天及以上,并且每天人流量均不少于100。

例如,表 stadium

+------+------------+-----------+
| id   | date       | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-08 | 188       |
+------+------------+-----------+

对于上面的示例数据,输出为:

+------+------------+-----------+
| id   | date       | people    |
+------+------------+-----------+
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-08 | 188       |
+------+------------+-----------+

Note:
每天只有一行记录,日期随着 id 的增加而增加。

思路/笔记:自连接的应用,这个语句其实有点取巧,因为日期都是连续的,而Id属于INT类型,比TO_DATE(date, 'yyyymmdd')/TO_CHAR(DATE, 'yyyymmdd')这样的运算快多了。

select distinct t1.*from stadium t1, stadium t2, stadium t3where t1.people >= 100 and t2.people >= 100 and t3.people >= 100and ((t1.id - t2.id = 1 and t1.id - t3.id = 2 and t2.id - t3.id =1)or (t2.id - t1.id = 1 and t2.id - t3.id = 2 and t1.id - t3.id =1)or (t3.id - t2.id = 1 and t2.id - t1.id =1 and t3.id - t1.id = 2))order by t1.id

262. 行程和用户

Trips 表中存所有出租车的行程信息。每段行程有唯一健 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。

+----+-----------+-----------+---------+--------------------+----------+
| Id | Client_Id | Driver_Id | City_Id |        Status      |Request_at|
+----+-----------+-----------+---------+--------------------+----------+
| 1  |     1     |    10     |    1    |     completed      |2013-10-01|
| 2  |     2     |    11     |    1    | cancelled_by_driver|2013-10-01|
| 3  |     3     |    12     |    6    |     completed      |2013-10-01|
| 4  |     4     |    13     |    6    | cancelled_by_client|2013-10-01|
| 5  |     1     |    10     |    1    |     completed      |2013-10-02|
| 6  |     2     |    11     |    6    |     completed      |2013-10-02|
| 7  |     3     |    12     |    6    |     completed      |2013-10-02|
| 8  |     2     |    12     |    12   |     completed      |2013-10-03|
| 9  |     3     |    10     |    12   |     completed      |2013-10-03|
| 10 |     4     |    13     |    12   | cancelled_by_driver|2013-10-03|
+----+-----------+-----------+---------+--------------------+----------+

Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。

+----------+--------+--------+
| Users_Id | Banned |  Role  |
+----------+--------+--------+
|    1     |   No   | client |
|    2     |   Yes  | client |
|    3     |   No   | client |
|    4     |   No   | client |
|    10    |   No   | driver |
|    11    |   No   | driver |
|    12    |   No   | driver |
|    13    |   No   | driver |
+----------+--------+--------+

写一段 SQL 语句查出 2013年10月1日2013年10月3日 期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。

+------------+-------------------+
|     Day    | Cancellation Rate |
+------------+-------------------+
| 2013-10-01 |       0.33        |
| 2013-10-02 |       0.00        |
| 2013-10-03 |       0.50        |
+------------+-------------------+

思路/笔记:常用操作,手动滑稽

select t.Request_at AS "Day",round(sum(case when t.Status = 'completed' then 0else 1end) / count(0),2) AS "Cancellation Rate"from trips t
where EXISTS (select u.Users_Idfrom users uwhere u.Users_Id = t.Client_Idand u.Banned = 'No')and t.Request_at between '2013-10-01' and '2013-10-03'
group by Day

185. 部门工资前三高的员工

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id 。

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Henry | 80000  | 2            |
| 3  | Sam   | 60000  | 2            |
| 4  | Max   | 90000  | 1            |
| 5  | Janet | 69000  | 1            |
| 6  | Randy | 85000  | 1            |
+----+-------+--------+--------------+

Department 表包含公司所有部门的信息。

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

编写一个 SQL 查询,找出每个部门工资前三高的员工。例如,根据上述给定的表格,查询结果应返回:

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Randy    | 85000  |
| IT         | Joe      | 70000  |
| Sales      | Henry    | 80000  |
| Sales      | Sam      | 60000  |
+------------+----------+--------+

思路/笔记

  1. 通过自连接排定次序
  2. join部门表
select d.Name Department, t.Name Employee, Salaryfrom (select Name,Salary,DepartmentId,(select count(distinct e1.Salary)from Employee e1where e1.DepartmentId = e2.DepartmentIdand e1.Salary > e2.Salary) rankfrom Employee e2)tleft join Department d on d.Id = t.DepartmentIdwhere rank < 3and d.Id is not nullorder by DepartmentId,Salary desc

总结

数据库操作的效率差别,需要在百万/千万/亿/十亿级别,才会有明显的差异,比如BAT的数据级别,只能自行研发数据库。所以这里只涉及到了很多基础的操作,比如case的用法,自连接的用法等。具体在项目常用到的操作有根据范式来设计表、根据常用到的字段来建立索引、考虑根据数据量按日/周/月分区、如何通过存储过程/函数高效转移数据、如何设置UNDO表空间保证数据库性能、怎样查看常用视图与统计表、如何备份、还原与清理数据...都还是需要在实际项目里去学习。

leetCode数据查询笔记(困难)相关推荐

  1. 笔记:3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

    对 3.2 数据查询-SELECT(单表查询.连接查询.嵌套查询.集合查询.多表查询)的转载与学习笔记: 0.前言 本篇文章是对<数据库系统概论>王珊老师主编的数据库查询SELECT部分做 ...

  2. JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)

    数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...

  3. 浅显易懂 SQLite3 笔记(03)— SQL数据查询(超级详细)

    文章目录 前言 一.单表查询 1. 选择表中的若干列(投影) 2. 选择表中的若干元组(选择) 3.ORDER BY 子句 4.聚集函数 5.GROUP BY 子句 二.连接查询 1.等值连接 2.自 ...

  4. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  5. 08_clickhouse主键/索引的工作机制(MergeTree的稀疏索引、索引的生成过程、索引的查询),数据标记的工作机制(数据存储、数据标记、数据查询、数据查询示例)(学习笔记)

    5.主键/索引的工作机制 5.1.MergeTree的稀疏索引 5.2.索引的生成过程 5.3.索引的查询 6.数据标记的工作机制 6.1.数据存储 6.2.数据标记 6.3.数据查询 6.4.数据查 ...

  6. 数据库原理与应用(SQL Server)笔记 第二章 简单数据查询

    文章目录 前言 一.SELECT 子句 (一)投影指定的列和投影全部列 (二)AS子句修改查询结构的列标题 例题1 (三)TOP谓词限制结果集中的行数 (四)INTO子句将结果插入新表中 例题2 (五 ...

  7. Web前端工作笔记002---json数据查询的方法_json查询大全,JsonSQL数据查询,jfunk数据查询

    JAVA技术交流QQ群:170933152 json数据查询的方法 网上看到有一篇帖子,有8种json数据查询的方法,大家可以研究一下,我现在分享一下! JsonSQL JsonSQL实现了使用SQL ...

  8. 笔记 ~ 第三章 - 3.2 数据查询

    目录 1. 数据查询 ① SELECT语句格式: ② 目标列表达式格式 ③ WHERE子句条件表达式格式 2. 单表查询 (1)选择表中的若干列 (2)选择表中的若干元组 (3)ORDER BY子句 ...

  9. JPA踩坑笔记(一) - 数据查询的两种方式

    本文介绍一下JPA常见的两种查询方式. 注:数据库为Oracle 1.前置准备 1.引入jar包 使用JPA,首先引入jar包,一个是JPA,另一个是数据库驱动,我使用的是Oracle数据库. < ...

最新文章

  1. 图像边缘检测之拉普拉斯(Laplacian)C++实现
  2. 速领:1024大礼包
  3. JSP标准标签库JSTL总结
  4. CSS 魔法系列:纯 CSS 绘制基本图形(圆、椭圆等)
  5. Redis-参数说明
  6. 牛客网--2019校招--瞌睡
  7. 基于STM32F4的舵机控制
  8. html和vue的区别,2018-09-16第四课 (v-html和v-text的区别,v-once和v-pre的区别,vue的生命周期,选项卡)...
  9. python server酱_教你如何使用Python向手机发送通知(IFTTT)
  10. mysql 启动 配置文件,mysql启动服务配置文件编写
  11. [转]欧洲航天局计划于2018年登月寻水
  12. Python数据分析案例-消费者用户画像
  13. 故障树手册(Fault Tree handbook)(5)
  14. 零点存在定理与介值定理
  15. ElasticSearch学习笔记
  16. win10可以上网但显示无法连接到Internet
  17. 【Vue 问题】文件流导出为excel无法打开
  18. 服务器2012还原系统,Windows Server 2012如何进行系统映像还原
  19. 没时间解释了快上车!0.04折老司机建站节福利来了
  20. 桥梁防撞智能预警系统方案

热门文章

  1. 3种设计模式java小程序_Java设计模式之单例模式(3种实现方式)
  2. 心灵战争服务器维护,心灵战争服务器异常产生哪些问题如何解决_心灵战争服务器异常产生问题及解决方法_玩游戏网...
  3. a king读后感 love of the_读后感kinglear
  4. 计算机系统基础期中考试,计算机系统基础第二次作业.docx
  5. 矩阵化为行最简形矩阵计算器_[内附完整源码和文档] 基于C++的小型特殊计算器...
  6. Win 10操作系统环境下python3.7 实现sklearn 安装
  7. 全球及中国家庭和公寓用对讲系统行业发展态势及及消费需求调研报告2022-2027年
  8. ubuntu下chrome以代理模式启动
  9. 创建透明窗口及其应用--屏幕画笔
  10. 主导精准脱贫-农业大健康·万祥军:恩施谋定硒功能性产业链