当前位置: 首页 > article >正文

【算法】MySQL算法

第二高薪水

本题求Employee表中的第二高的不同薪水,也就是说如果Employee表是:

则第二高的薪水是2000。

题目要求输出的格式是:

对应的sql语句:

该语句的执行顺序:

1.从Eomployee表中选取所有行。

2.对salary列进行去重。

3.按照salary列的值进行降序排序。

4.从取第一行下面的一行记录。

由于子查询到的salary可能是空的,因此需要用到ifnull函数来处理结果为空的情况

ifnull(参数1,参数2)如果参数1不为空则返回参数1的值,否则返回参数2的值。

这里有一个细节点:就是我们要注意题目让我们输出的格式(列名格式),先看下面的sql语句。

SELECT FIND_IN_SET('d','a,b,c,d') as `index`;

find_in_set函数返回的值是4如果不使用as对列名重命名则结果是:

 因此我们要使用as对列名进行重命名。

 

部门工资前三高的所有员工

  

select
    d.name 'Department', e1.name 'Employee',e1.salary
from
    employee e1 join department d on e1.DepartmentId = d.id
where
    3 > (select
            count(distinct e2.salary)
        from
            Employee e2
        where
            e2.salary > e1.salary
                and e2.DepartmentId = e1.DepartmentId
        )
;

 执行的顺序是:

1.employee表和department表按照条件进行内连接。

2.进行子查询,从e1表中第一行开始,e1中的每一条记录都要和e2的所有记录比较,通过聚合函数筛选出e2表中有三条以下比e1大,则该e1满足条件。


http://www.kler.cn/a/566653.html

相关文章:

  • VSCode大的JSON数据不能折叠问题
  • LeetCode 滑动窗口章节 (持续更新中)
  • 复杂html动态页面高还原批量导出方案
  • 微服务即时通信系统---(六)语音识别子服务
  • 【Java】Spring Boot全量YAML配置说明
  • 爬虫获取 item_get 接口:获得VIP商品详情的完整指南
  • Java语言Leetcode中常用的一些基础语法
  • 性能测试测试策略制定|知名软件测评机构经验分享
  • 经典算法 统计数字问题(常数时间解决)
  • LeetCode 热门100题-除自身以外数组的乘积
  • 【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
  • 不同Embedding模型与大语言模型(LLM)的交互主要通过语义向量传递实现
  • 对泰坦尼克号沉没事件幸存者数据分析和预测
  • 如何用python画一棵分形树
  • [C++] enum 以及 enum class 简单用法
  • 一文掌握Splash的详细使用
  • QT Creator添加延迟的方法
  • 爬取网易云歌单信息并分析
  • 有向图的拓扑排序-BFS求解
  • 如何选择DevOps平台?GitHub、GitLab、BitBucket、Jenkins对比与常见问题解答