首页 > 其他分享 >【面试准备】窗口函数学习

【面试准备】窗口函数学习

时间:2024-04-13 10:45:29浏览次数:25  
标签:窗口 函数 employees RANK 员工 面试 DENSE 查询 id

昨天面试,技术问的比较简单,甚至没有问算法。业务的话,应该是我没有过面的主要原因,后续展开分析

#技术:唯一难倒我的是一个sql

##题目:员工表找出每个部门员工年龄最大的两个员工。

在MySQL中,你可以使用窗口函数来查询每个部门年龄最大的两名员工。MySQL 8.0及以上版本支持窗口函数。以下是一个使用`ROW_NUMBER()`和`DENSE_RANK()`窗口函数的示例SQL查询:

 

SELECT id, name, age, department_id
FROM (
    SELECT id, name, age, department_id,
           DENSE_RANK() OVER (PARTITION BY department_id ORDER BY age DESC) AS rank
    FROM employees
) AS ranked_employees
WHERE rank <= 2;

 

这个查询的逻辑如下:

1. 首先,从`employees`表中选择所有员工的`id`、`name`、`age`和`department_id`。
2. 使用`DENSE_RANK()`窗口函数为每个部门的员工按年龄降序分配一个排名(`rank`)。`DENSE_RANK()`函数会给具有相同年龄的员工分配相同的排名,并且排名不会跳过任何数字。
3. 外层查询通过子查询创建了一个名为`ranked_employees`的临时表,这个表包含了原始`employees`表的所有列以及新添加的排名列。
4. 最后,外层查询通过`WHERE`子句筛选出每个部门排名前两名的员工(`rank <= 2`)。

这个查询将返回每个部门年龄最大的两名员工的详细信息。如果你只需要特定的信息,比如只需要员工的姓名和部门,你可以相应地调整`SELECT`子句中的字段。

请注意,这个查询假设`employees`表中的`age`列是唯一的。如果有员工年龄相同,`DENSE_RANK()`函数会给他们相同的排名,这样每个部门可能会有超过两名员工被选出。如果你希望在年龄相同的情况下进一步筛选,你可能需要添加额外的条件来决定哪些员工被包括在内。

 

标签:窗口,函数,employees,RANK,员工,面试,DENSE,查询,id
From: https://www.cnblogs.com/jin-wen-xin/p/18132560

相关文章

  • C++ 解引用与函数基础:内存地址、调用方法及声明
    C++解引用获取内存地址和值在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符&一起使用)。但是,你也可以使用指针来获取变量的值,这可以通过使用*运算符(解引用运算符)来实现:stringfood="Pizza";//变量声明string*ptr=&food;//指针声明//引用......
  • 汇编语言简易教程(11):函数与栈帧
    汇编语言简易教程(11):函数与栈帧需要注意.这里的函数指的是汇编语言(yasm)的函数,但对理解其他高级语言的函数在汇编中的实现会有很大的帮助.函数和过程(即空函数)有助于将程序分解为更小的部分,从而更容易编码、调试和维护。函数调用涉及两个主要操作:函数链接由于可以......
  • 9.lua中的函数
    1.函数的基本形式[]:表示可选functionf([参数列表])函数体[returna,b,c]//可以同时返回多个值end2.固定参数functionf(a,b) print(a,b)endf(1)f(1,2)f(1,2,3)输出结果如下:1 nil1 21 23.可变参函数functionf(...) locala,b=... print(a,b)end......
  • 使用内置函数 (SQL Server) 验证、查询和更改 JSON 数据
    使用内置函数(SQLServer)验证、查询和更改JSON数据项目2023/09/0313个参与者反馈 本文内容此页上的示例JSON文本使用ISJSON函数验证JSON文本使用JSON_VALUE函数从JSON文本中提取值使用JSON_QUERY函数从JSON文本中提取对象或数组显示另外......
  • 意难平!面试小米,一步之遥...
    面试训练营的同学,前几天面试小米,都三面了,本来以为稳了,但没想到最后还是挂了。按往年的经验来看,小米相比与其他互联网大厂来说,面试的难度比较低,而且薪资也比较低,所以拿到Offer的概率还是很大的。但今年这个情况,这位同学还是硕士身份,最后还是挂在三面了,确实挺可惜的。那咱们今......
  • string类的成员函数size()的类型
    string类的成员函数size()的类型string类的成员函数size()的类型并非是int型,虽然其类型也是整型的一种,但不是int这就导致许多对应的库函数,在针对int型进行比较时,无法比较size()像是max函数:intMAX=0;stringa;cin>>a;MAX=max(MAX,a.size());//出错解决方法很简单:就是......
  • 8.函数
    【一】函数1)概念将某一块代码封装起来须先定义,在调用2)定义1.空函数#定义def函数名(): 代码体#调用函数名()2.函数参数函数的调用者向函数体传值的媒介#定义def函数名(参数): 代码体#调用函数名(变量)3.函数返回值函数结束后返回的结果函数的......
  • C语言实现split函数
    #include<stdio.h>#include<string.h>voidmySplit(char*src,constchar*separator,chardest[][20],int*num){char*pPre=NULL;char*pNext=NULL;//记录分隔符数量intcount=0;//原字符串为空if(src==NULL||strle......
  • 模板函数使用类型推导时的bug
    templatestaticboolparse_a_value(T&val,Json::Valuejson_val){if(json_val.isNull())returnfalse;if(typeid(val)==typeid(int)||typeid(val)==typeid(int16_t)||typeid(val)==typeid(int8_t)||typeid(val)==typeid(int32_t)){......
  • C++陷阱—指定的返回类型的函数实际没有返回时会发生什么
    当一个string变量作为左值接收函数返回,当函数没有正确返回时,该string变量被如何构造?请看如下代码:#include<iostream>#include<string.h>usingnamespacestd;stringfoo(){if(0){return"youget";}}intmain(intargc,char**argv){......