题目来自leetcode
记录题型,做题方法,错误原因和注意事项
如有问题 请及时纠正

1.分数排序
要求:如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

SELECT Score, dense_rank() over(order by Score DESC)
AS 'Rank' from Scores;

这里用dense_rank()来对成绩进行排序

row_number(),rank(),dense_rank()的区别

  1. row_number() 按前后顺序依次连续递增排序 相同数值的排名是不同的 1,2,3,4,5…
  2. rank() 相同数值的排序相同 总体排名可能不连续 基于个数进行排序 1,2,2,2,5… 主要用于学生成绩排名等
  3. dense_rank() 相同数值的排序相同 总体排名连续
    1,2,2,2,3…

2.第n高的薪水

```bash
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N=N-1;RETURN (# Write your MySQL query statement below.select ifnull((select distinct Salary from Employee order by Salary DESC limit N,1),NULL) );
END

思路:先按薪水降序排序,使用limit x,y 去掉前面x行的值,取后面y行
由于要取第n个,所以set n=n-1,即去掉前面n-1,去后面1

注:
1)用ifnull()使没有的情况下取null
2)如果要取拥有第n高薪水人的信息,不能直接在原基础上加上其他列,会取不到相同薪水的人员;要先得到第n高的薪水值,再用where进行过滤

3.每个部门薪资最高的员工

SELECTDepartment.NAME AS Department,Employee.NAME AS Employee,Salary
FROMEmployee,Department
WHEREEmployee.DepartmentId = Department.Id AND ( Employee.DepartmentId, Salary ) IN (SELECT DepartmentId, max( Salary ) FROM Employee GROUP BY DepartmentId )

思路:联结employee和department两个表
选取DepartmentId, Salary 符合max标准的行
注:group by 只能作用于DepartmentId, max( Salary ),如果加上其他的列进行select在数据多时会出现错误

4.首日登录后次日登陆的玩家数量

select round(count(b.player_id)/count(distinct a.player_id),2) as 'fraction'
from (select player_id,min(EVENT_DATE)as e  from Activity
group by player_id) a //a表为首日登陆用户和登陆的日期
left join Activity b
on a.player_id=b.player_id and DATEDIFF(b.EVENT_DATE, a.E) = 1

思路:联结两张表,条件是日期差一天
注:日期要取最小值计算;不可以直接用min(a.play_id), 要新建表

5.最多好友数

select a.id,sum(a.n)as num from
(select requester_id as id ,count(*) as 'n' from request_accepted group by requester_id union all
select  accepter_id as id ,count(*) as 'n' from request_accepted group by accepter_id) as a
group by a.id
order by 2 desc limit

因为requester_id,accepter_id的id好友数都要计算 所以连接两个表用union all 之后取最大的值,所以可以用order by desc limit 1

6.比较每个月各部门的平均收入与公司总体收入

select  distinct date_format(pay_date, '%Y-%m') as pay_month,e.department_id,case when avg(s.amount) over(partition by s.pay_date,e.department_id )>avg(s.amount) over(partition by s.pay_date)then 'higher'when avg(s.amount) over(partition by s.pay_date,e.department_id )<avg(s.amount)over (partition by s.pay_date)then 'lower'else 'same'
end as comparisonfrom salary s , employee e where s.employee_id=e.employee_idorder by 1 desc

用case when…将几种不同的情况分类获取输出比较结果
注:在取公司每月平均值时,不要忘记(partition by s.pay_date)按时间来选取

7.学生地理位置 纵向输出
题目指出来自america的学生要多于其他两个地方的学生

select America, Asia,Europe
from (select row_number() over(order by name) id, name as America from student where continent = 'America') a
left join (select row_number() over(order by name) id, name as Asia from student where continent = 'Asia') b
on a.id = b.id
left join (select row_number() over(order by name) id, name as Europe from student where continent = 'Europe') c
on a.id = c.id
order by 1,2,3

思路:首先选取处分别来自着三个地方的学生,再将学生进行排序(序号作为id),方便后期表联结,由于来自美洲的学生最多,所以用美洲的同学进行两次与两位两个表的left join 联结,联结的依据是排序编号id相同。
注:这里尽量不要用case when 。。。then 'america’这样的形式尽享选取,不然会出现空表选取时,返回结果为[null,null,null]而不是[ ]。

sql做题记录(一)相关推荐

  1. 概率期望题(期望 DP)做题记录

    概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问:生成树的期望深度. 不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结 ...

  2. 数数题(计数类 DP)做题记录

    数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...

  3. CSDN 第六期编程竞赛做题记录

    CSDN 第六期编程竞赛做题记录 -- CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 9.18周日闲来无视写一下 csdn 的编程题,每期编程 ...

  4. 退役前的做题记录5.0

    退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树 ...

  5. Regional 做题记录 (50/50)

    写在前面 博主深感自己太弱了QAQ 于是有了一个刷水的想法,Regional的题目还是有很多考查思维的题目,所以这次是乱做50道思考题,可能会顺带做一些水题,这些题的简要题解会写到这篇博文里面,希望能 ...

  6. 2020.7月做题记录

    转眼就到了2020的下半年了-前方仍是一片茫然. 长期计划 prufer 序列 2020.07.02-2020.07.04 Problem Finished P2624 [HNOI2008]明明的烦恼 ...

  7. SQL刷题记录(一)

    SQL刷题记录(一) 答主刚开始自学SQL,本专栏记录的是答主在牛客上刷题的过程.疑惑和部分思路都会写在习题下方. 题目来源:牛客网刷题网址 本文内容:T195-T225 T195. select * ...

  8. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  9. 【Pikachu】漏洞练习平台做题记录+原理解析(2.2)XSS姿势和技巧

    前言 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞. 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意. pikach ...

  10. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

最新文章

  1. winform 弹出窗体位置设定
  2. 中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
  3. jquery 插件和后台模板搜集
  4. 外部中断0——51程序
  5. JVM—堆栈 堆 方法区 静态区 final static 内存分配
  6. Syncd - 开源自动化部署工具
  7. 项目启动时flowable报错提示 version mismatch: library version is *, db version is *
  8. 【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(2)
  9. Python中lambda的使用,与它的三个好基友介绍!
  10. Tomcat安装配置
  11. Mysql联表update数据
  12. 浏览器的滚动条滚动时,导航条的背景变色
  13. 解析二分查找时间复杂度
  14. 家用计算机网络的传输介质,计算机网络传输介质
  15. 利用canvas开发一个绘图板
  16. quagga命令行解析
  17. 7-25 念数字(15 分)Java与C++
  18. Virtualbox源码分析23 NEM(Hyper-V兼容)4 VMExit
  19. VS2013环境下配置glut、glew、freeglut、gltools
  20. C++实现简易(多人弹幕控制主播游戏人物类型,CMD_迷宫小游戏)(一)

热门文章

  1. 测序数据量,测序深度和测序覆盖度
  2. win10注册表WOW6432Node
  3. 深入理解Flash的沙箱 – Application Domains
  4. 终于把Edison板子上线了
  5. 视觉SLAM十四讲CH9代码解析及课后习题详解
  6. Matlab-rmdir函数无法删除文件夹解决方案
  7. linux怎么用命令上传本地文件,Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件...
  8. LeetCode 237. 删除链表中的节点
  9. bose qc25更换耳机单元
  10. 【反思】写在腾讯电话面试之后