Mysql学习积累

本文探讨了如何使用SQL查询获取数据库中第二高的薪资,通过创建自定义函数实现任意位置的最高薪资获取。同时,介绍了两种不同的分数排名方法,包括使用COUNT(DISTINCT)和窗口函数DENSE_RANK()进行排名。这些技巧对于数据处理和分析非常实用。
摘要由CSDN通过智能技术生成

1、select (select distinct salary from employee order by salary desc limit 1,1)  as SecondHighestSalary 

as:给数据库字段取别名。

distinct:排除相同得数据字典

order by 排序,模式从小到大,desc是降序。

limit:指标查询表格行列。1,1表示第二行的第1行的字段

select  ifnull((select distinct salary from employee order by salary desc limit 1,1) ,null) as SecondHighestSalary 

ifnull(a,b)表示数据a为空,则选择输出b

上述例子升华:

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

set设置变量的值

 RETURN代表语句结果

2、分数表排名

方法一:

select 

    a.score,

    count(distinct b.score) 'rank' 

from 

    scores a,scores b 

where a.score <= b.score 

group by a.id

order by a.score desc

首先明白笛卡尔积,其次sql执行顺序1、最先执行from tab;2、where语句是对条件加以限定;3、分组语句【group by…… having】;4、聚合函数;5、select语句;6、order by排序语句

方法二:使用函数

rank()

排名为相同时记为同一个排名, 并且参与总排序

dense_rank() over (PARTITION BY xx ORDER BY xx [DESC])

排名相同时记为同一个排名, 并且不参与总排序

row_number() over (over (PARTITION BY xx ORDER BY xx [DESC]))

排名相同时记为下一个排名

select score,dense_rank() over (order by score desc)'Rank' from Scores 

暂定。。存入自己word里面了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值