25个高级SQL查询-列出结果集的前5行

本专栏中的许多示例将基于以下员工表(employee)。只有少数例子将以其他表格为基础;在这些情况下,表格将与示例一起进行说明。

一、WITH

WITH AS 短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到。有的时候,with as 是为了提高SQL语句的可读性,减少嵌套冗余。

二、SQL例句

下一个SQL查询将创建一个包含公司前五名工资的员工数据的报告。这种报告必须根据给定的标准进行排序;在我们的示例中,排序标准将再次为工资降序:

WITH employee_ranking AS (
  SELECT
    employee_id,
    last_name,
    first_name,
    salary,
    RANK() OVER (ORDER BY salary DESC) as ranking
  FROM employee
)
SELECT
  employee_id,
  last_name,
  first_name,
  salary
FROM employee_ranking
WHERE ranking <= 5
ORDER BY ranking

上一个查询中的WITH子句创建了一个名为employee_ranking的CTE(公用表表达式),这是一种在主查询中使用的虚拟表。

CTE中的子查询使用函数RANK()来获得排名中每一行的位置。子句OVER(ORDER BY salary DESC)指示RANK()值必须如何计算。薪资最高的行的RANK()函数将返回1,依此类推。


最后,在主查询的WHERE中,我们要求那些排名值小于或等于5的行。这使我们只能按排名值获得前5行。同样,我们使用ORDER BY子句来显示结果集,该结果集按升序排列。

三、查询结果

猜你喜欢

转载自blog.csdn.net/wyxtx/article/details/131786441