尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

高级的 SQL 查询技巧

高级的 SQL 查询技巧
📅 发布时间:2026/6/22 0:13:42

1.常见表表达式(CTEs)

with toronto_ppl as (
    SELECT DISTINCT  name
    FROM population
    WHERE country = "Canada"
      AND city = "Toronto"
)
   , avg_female_salary as (
        SELECTAVG(salary) as avgSalary
        FROM salaries
        WHERE gender = "Female"
    )
SELECT  name
     , salary
FROM People
WHERE name  in (SELECT   DISTINCT   FROM toronto_ppl)
AND salary >= (SELECT avgSalary FROM avg_female_salary)

 

2.递归CTEs.

递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。

递归CTE有3个部分:

  • 锚构件:返回CTE的基本结果的初始查询
  • 递归成员:引用CTE的递归查询。这是所有与锚构件的联盟
  • 停止递归构件的终止条件

with org_structure as (
    SELECT id
         , manager_id
    FROM staff_members
    WHERE manager_id IS NULL
    UNION ALL
    SELECT sm.id
         , sm.manager_id
    FROM staff_members sm
             INNER JOIN org_structure os
                        ON os.id = sm.manager_id

 

3.临时函数

  • 它允许您将代码的块分解为较小的代码块
  • 它适用于写入清洁代码
  • 它可以防止重复,并允许您重用类似于使用Python中的函数的代码。

SELECT name
     , CASEWHEN tenure < 1THEN"analyst"
            WHEN tenure BETWEEN1and3THEN"associate"
            WHEN tenure BETWEEN3and5THEN"senior"
            WHEN tenure > 5THEN"vp"
            ELSE"n/a"
        ENDAS seniority
FROM employees

=====改写为使用临时函数=====》

 

CREATE TEMPORARYFUNCTION get_seniority(tenure INT64) AS (
   CASEWHEN tenure < 1THEN"analyst"
        WHEN tenure BETWEEN1and3THEN"associate"
        WHEN tenure BETWEEN3and5THEN"senior"
        WHEN tenure > 5THEN"vp"
        ELSE"n/a"
   END
);
SELECTname
     , get_seniority(tenure) as seniority
FROM employees

 

Rank vs Dense Rank vs Row Number

SELECT Name
     , GPA
     , ROW_NUMBER() OVER (ORDER BY GPA desc)
 , RANK() OVER (ORDER BY GPA desc)
 , DENSE_RANK() OVER (ORDER BY GPA desc)
FROM student_grades

 

cf75feb379f69ed58aea11a8c83773ab

 

ROW_NUMBER()返回每行开始的唯一编号。当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。

Rank()返回从1开始的每行的唯一编号,除了有关系时,等级()将分配相同的数字。同样,差距将遵循重复的等级。

dense_rank()类似于等级(),除了重复等级后没有间隙。请注意,使用dense_rank(),Daniel排名第3,而不是第4位()。

 

计算Delta值

SELECT month
       , sales
       , sales - LAG(sales, 1) OVER (ORDER BY month)
FROM monthly_sales
# Comparing each month's sales to the same month last year
SELECT month
        , sales
        , sales - LAG(sales, 12) OVER (ORDER BY month)
FROM monthly_sales

 

计算运行总数

SELECT Month
        , Revenue
        , SUM(Revenue) OVER (ORDER BY Month) AS Cumulative
FROM monthly_revenue

059605b7c5f1e50d51f16e59ad6af975

 

相关新闻

  • 25,9.24日报
  • adobe illustrator中如何打出度数的上标
  • 常用API

最新新闻

  • 突破传统RAG局限:LangChain+通义千问融合动态路由与检索融合的工业级智能客服架构
  • UVa 553 Simply Proportion
  • 终极指南:如何免费突破网盘下载限制,获取真实直链地址
  • 2026昆明白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 2026年重庆混凝土预制构件厂家推荐:水篦子/路沿石/井盖/排水管/防撞墩等优质品牌全解析 - 品牌发掘
  • JMeter性能测试实战:从脚本执行到瓶颈定位的完整指南

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号