如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
研究过算法的朋友,应该都遇到过最短路径求值的问题。简单来说,就是从出发地到目的地有多条路线可走,要求使用算法找出最短路径。 如果使用的是 SQL ,怎么解决这类问题? 接着往下看,很快就有答案了。...在 SQL 中用递归请参考——SQL 的递归表达式。 在递归表达式中,初始的数据应该是列举出能从 a 点直接到达的地点及相应的距离,目前有 a -> b、a -> c 这两条路线。...在 SQL 中加入了条件 INSTR(t.path, b.ep) >> sp ep distance path ------ ------ -------- -----------...完整的 SQL 如下: WITH RECURSIVE t (sp, ep, distance, path) AS (SELECT *, CAST(CONCAT(a.sp, ' -> ', a.ep
',20); insert into students values(9,'GILLIAN',20); insert into students values(10,'CHAD',21); 求年龄最大的学生...方式二,有没有不使用max的方法来求最大呢?使用自连接加比较。...students where age not in (select a.age from students a, students b where a.age< b.age); 先做笛卡尔集,求年龄比任一个小的...方式二的改良: select * from students s1 where not exists (select 1 from students s2 where s1.age<s2.age)
难度困难 SQL架构 给如下两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同)。...对于如上样例数据,结果为: pay_monthdepartment_idcomparison2017-031higher2017-032lower2017-021same2017-022same 解释 在三月,公司的平均工资是...由于部门 '1' 里只有一个 employee_id 为 '1' 的员工,所以部门 '1' 的平均工资就是此人的工资 9000 。...第二个部门的平均工资为 employee_id 为 '2' 和 '3' 两个人的平均工资,为 (6000+10000)/2=8000 。...在二月用同样的公式求平均工资并比较,比较结果为 'same' ,因为部门 '1' 和部门 '2' 的平均工资与公司的平均工资相同,都是 7000 。
1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。...巩固SQL语法,高效搞定工作:通过不断练习,能够熟悉SQL的语法和常用函数,掌握SQL核心知识点,提高SQL编写能力。代码能力提升了,工作效率自然高了。...,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同)。...第二个部门的平均工资为 employee_id 为 '2' 和 '3' 两个人的平均工资,为 (6000+10000)/2=8000 。...在二月用同样的公式求平均工资并比较,比较结果为 'same' ,因为部门 '1' 和部门 '2' 的平均工资与公司的平均工资相同,都是 7000 。
问题的原型,大概是这样的:一张表,有三列数据,表示了同一个维度的数据。...于是,将 SQL 语句改写如下: SELECT user_1.user_id,user_2.app_user_id FROM ( SELECT distinct user.user_id...于是,我又想到了一种方案,那就是求 CRC 的总和。CRC 方法,简单来说,就是求每个 user id 的哈希值,然后求和。若和一致,则说明两列包含了相同的散值。...我之前提过一篇文章讲 CRC,详细的用法在这篇文章里: |SQL中的数据检验, CRC or MD5?...而求两列异值,最快的方法,由上可知,便是Left Join 求 Null, 并且只要有一条数据存在,就足以说明集合的包含关系.
,来屏蔽组函数的滤空功能 SQL> select count(*),count(nvl(comm,0)) from emp; --结果相同,count(comm)统计所有结果 SQL> --求各个部门的平均工资...group by子句中 SQL> --包含在group by子句中的列不必包含在select列表中 SQL> --按部门,不同的职位统计平均工资 SQL> select deptno,job,avg(sal...4 having avg(sal)>2000 SQL> --having和where的区别 SQL> --求10号部门的平均工资 SQL> select deptno,avg(sal) 2...> --可以在组函数中嵌套滤空函数,来屏蔽组函数的滤空功能 SQL> host cls SQL> --求各个部门的平均工资 SQL> set linesize 150 SQL> col sal for...> --having 过滤分组 SQL> host cls SQL> --having和where的区别 SQL> --求10号部门的平均工资 SQL> select deptno,avg(sal)
在一些比赛中,为了公平起见,算法端会在评委给出的分数里面去掉一个最高分和一个最低分,再求平均分,平均分即是选手的最后得分。...在某次比赛中,评委给选手 A 打出了一组分数:98、88、94、92、95、93、92,我们怎么用 SQL 来计算选手 A 的最后得分呢? 假设评委打出的分数存储在 t 表的 score 字段里面。...具体的 SQL 实现如下: SELECT AVG(score) AS final_score FROM t WHERE score NOT IN ( (SELECT MIN(...方案二 先对所有的分数求和,再减去最高分和最低分,最后求平均值。...方案三 如果数据库支持窗口函数,可以用窗口函数对分值分别按升序和降序排序(分值相同的序号也不同),去掉序号为 1 的记录再求平均值。
也就是说,你使用的是sum()函数,就会组内求和;当你使用的是avg()函数,就会组内求平均值;当你使用的是count()函数,就会进行组内计数;当你使用的是max()函数,就会进行组内求最大值;你使用的是...min()函数,就会进行组内求最小值。...也就是说SQL语句中只要有group by,那么在select后面的展示字段中一般会有聚合函数(5个聚合函数)中的一个或多个函数出现。...结果集指的是在SQL语句中,添加其它任何一个限制条件,最终展示给我们表,都是结果集。添加不同的限制条件,查询出来的结果集也是不同的。 原始表只有一个,结果集却是各种各样的。...7.group by和order by,一对老搭档 习题一:查询每个部门的员工的平均工资,按照平均工资降序。 习题二:查询每个部门的员工的平均工资,按照平均工资升序。
分组函数 SQL中经常使用的分组函数 Count(): 计数 Max():求最大值 Min():求最小值 Avg():求平均值 Sum():求和 -- 统计emp...(sal) from emp; -- 求全部雇员的最高工资 select max(sal) from emp; -- 求部门编号为20的雇员的平均工资和总工资 select avg(sal),sum...求出平均工资大于2000的部门编号和平均工资 刚開始学习的人非常easy错误地写成将工资大于2000的条件写在where的后面 SELECT deptno,avg(sal) FROM emp WHERE...2000的部门编号和平均工资 select e.deptno, avg(sal) from emp e, dept d where e.deptno = d.deptno having avg(sal)...: 仅仅要一列上存在反复内容才有可能考虑到用分组查询 注意: 分组函数能够嵌套使用,可是在组函数嵌套使用的时候不能再出现分组条件的列名 例:求平均工资最高的部门编号、部门名称、部门平均工资 第一步:
语法以及执行顺序 SQL 顺序 select ... 5 from ... 1 where ... 2 group by col_name,col_name 3 having ... 4 order by...col_name:即将数据按照col_name相同值进行分组 组函数 常见有5个: avg:求平均值 count:求总数 max:最大值 min:最小值...6.限制组结果的返回一定使用having不能使用where 练习 1.查看各部门,职称相同的人的平均工资。...的所有部门的id和平均工资 目标: 部门id 和 avg(salary) from: s_emp 条件: 部门平均工资...练习 1.查看职称不以VP开头的所有员工, 2.并且将他们以职称分组, 3.求各职称的工资总和, 4.将工资综合>5000的职称和工资总合显示出来。
求 emp 表的记录数 select count(*) from emp; 求员工最高工资 select max(sal) from emp; 求员工最低工资 select min(sal) from...emp; 求雇员的平均工资 select avg(sal) from emp; 求每个月要发放给雇员的基本工资总数 select sum(sal) from emp; 求 20部门的总工资 注意:...select deptno,count(empno) from emp group by deptno -- 求每个部门的平均工资 select deptno,avg(sal) from emp group...编写复杂的子查询的解决思路是:逐层分解查询。即从最内层的子查询开始分解,将嵌套的SQL语句拆分为一个个独立的SQL语句。...子查询的执行过程遵循“由里及外”原则,即先执行最内层的子查询语句,然后将执行结果与外层的语句进行合并,依次逐层向外扩展并最终形成完整的SQL语句。
下面我来举个列子: 题1:请用一条sql语句,统计薪资大于薪资最高的员工所在部门的平均工资和薪资最低的员工所在部门的平均工资的平均工资的员工信息。...由上的拆分可以发现,条件是员工的工资要大于一个数,所以sql语句可以变成:“select * from emp where sal> ? ”; 那么我们下一步就是继续往里面渗透的分析,这个“?”...再进一步简化,就成了: “统计薪资 大于 ( (‘x‘ + ‘y‘)/2 ) 的员工信息。” 所以分析到这里,可以将sql写成: “select * from emp where sal> ?...我们首先对X进行解析: ‘薪资最高的员工所在部门的平均工资‘ ---- 这不就是求 什么什么的平均工资吗?...所以x的sql语句可以进一步变成下面的: select avg(sal) from emp where deptno=(select deptno from emp where sal=(select
之前我们简单的了解了增、删、改、查这几类T-SQL语法来操纵数据表,但是为了更方便快捷地完成大量任务,SQL Server 提供了一些内部函数,可以和SQL Server 的SELECT语句来联合使用,...聚合函数: 用于对一组值执行计算,并返回单个值 如:求总和、平均值、最大或最小值等 SUN:求总和、AVG:求平均数、MAX和MIN:返回最大最小值 COUNT:返回非空值的计数 查询表中所有员工基本工资的综合...: select sum(基本工资) as 总工资 from *表名* 查询表中所有员工的平均工资: select avg(基本工资) as 平均工资 from *表名* 查询表中最高和最低的基本工资...group by 子句分类组合,再根据需要得到的统计信息,只显示限定条件的组,需要使用 HAVING 子句 查询表中每个职务的平均工资: select 职务,avg(基本工资) as 职务基本工资...from *表名* group by 职务 查询表中平均工资小于10000的职务: select 职务,avg(基本工资) as 职务平均工资 from *表名* group by 职务 having
|ALL]n) -- 求平均值,忽略空值 COUNT({*|[DISTINCT|ALL]expr}) -- 统计个数,其中expr用来判定非空值(使用*计算所有选定行,包括重复行和带有空值的行)...MAX([DISTINCT|ALL]expr) -- 求最大值,忽略空值 MIN([DISTINCT|ALL]expr) -- 求最小值,忽略空值 SUM([DISTINCT|ALL]n) --...from emp * ERROR at line 1: ORA-00937: not a single-group group function --使用having子句过滤分组结果 --查询平均工资高于的部门号...,及其平均工资。...select deptno,avg(sal) from emp group by deptno having avg(sal)>2000; --查出平均工资在以上的工种(job) select job
常见的聚合函数有哪些? 1、求个数/记录数/项目数等:count() 例如: 统计员工个数?...求某个公司员工的平均工资?...select avg(score) from Scores ---平均成绩 select avg(salary) from Company --平均工资 注意: 若某行的score值为null时,计算平均值时会忽略带有...–必须为数字列 例如:求某个班的总成绩?...数据类型详见: SQL Server 数据类型的详细介绍及应用实例1 SQL Server 数据类型的详细介绍及应用实例2 SQL Server 数据类型的详细介绍及应用实例3 例如: select
2、隐式转换 SQL语句中查询变量和字段定义类型不匹配是另一个常见的错误。...SQL 重写后如下,执行时间缩小为1毫秒左右。...a.resourcesid GROUP BY resourcesid) c ON a.resourceid = c.resourcesid 但是子查询 a 在我们的SQL...但是编译器只是尽力服务,所有数据库的编译器都不是尽善尽美的。 上述提到的多数场景,在其它数据库中也存在性能问题。了解数据库编译器的特性,才能避规其短处,写出高性能的SQL语句。...程序员在设计数据模型以及编写SQL语句时,要把算法的思想或意识带进来。 编写复杂SQL语句要养成使用 WITH 语句的习惯。简洁且思路清晰的SQL语句也能减小数据库的负担 。
后面接子查询:有哪些部门的平均工资高于30号部门的平均工资 SELECT emp.deptno,dept....*,d.loc FROM emp e,dept d WHERE e.empno=7788 AND e.deptno=d.deptno; -- 值得学习 SQL查询的综合案例 查询出高于本部门平均工资的员工信息...列出达拉斯加工作的人中,比纽约平均工资高的人 查询7369员工编号,姓名,经理编号和经理姓名 查询出各个部门薪水最高的员工所有信息 -- 13....查询出高于本部门平均工资的员工信息- SELECT * FROM emp e WHERE sal > (SELECT AVG(sal) AS 平均工资 FROM emp d GROUP BY deptno...(SELECT AVG(e2.sal) FROM emp e2 WHERE e1.deptno=e2.deptno GROUP BY e2.deptno); -- 14.列出达拉斯加工作的人中,比纽约平均工资高的人
难度简单 SQL架构 员工表:Employee +---------------+---------+ | Column Name | Type | +---------------+----...employee_id | int | | team_id | int | +---------------+---------+ employee_id 字段是这张表的主键...,表中的每一行都包含每个员工的 ID 和他们所属的团队。...编写一个 SQL 查询,以求得每个员工所在团队的总人数。 查询结果中的顺序无特定要求。... team_id 为 8 的团队的成员, ID 为 4 的员工是 team_id 为 7 的团队的成员, ID 为 5、6 的员工是 team_id 为 9 的团队的成员。
今日真题 题目介绍: 求团队人数 find-the-team-size 难度简单 SQL架构 员工表: Employee +---------------+---------+ | Column Name...,表中的每一行都包含每个员工的 ID 和他们所属的团队。...编写一个 SQL 查询,以求得每个员工所在团队的总人数。 查询结果中的顺序无特定要求。...team_id 为 8 的团队的成员, ID 为 4 的员工是 team_id 为 7 的团队的成员, ID 为 5、6 的员工是 team_id 为 9 的团队的成员。...sql select employee_id,count(*) over(partition by team_id) team_size from Employee 已经有灵感了?
领取专属 10元无门槛券
手把手带您无忧上云