专攻SQL必须了解的10个高级概念
2025-09-24 12:18
, CASE WHEN tenure
WHEN tenure BETWEEN 1 and 3 THEN "associate"
WHEN tenure BETWEEN 3 and 5 THEN "senior"
WHEN tenure> 5 THEN "vp"
ELSE "n/a"
END AS seniority
FROM employees
意味著,您可以借助于临时变数来猎捕案举例来说句。
CREATE TEMPORARY FUNCTION get_seniority(tenure INT64) AS (
CASE WHEN tenure
WHEN tenure BETWEEN 1 and 3 THEN "associate"
WHEN tenure BETWEEN 3 and 5 THEN "senior"
WHEN tenure> 5 THEN "vp"
ELSE "n/a"
END
);
SELECT name
, get_seniority(tenure) as seniority
FROM employees
通过临时变数,转发本身极为简单,极为可读,您可以以此类推用作资历变数!
四、用作CASE WHEN枢转数据资料
您很有可能则会不想到许多要求在陈述时用作CASE WHEN的上述情况,这只是因为它是一种多动态的基本概念。如果要根据其他变量资源分配某个个数或类,则并不需要您重写繁杂的条件运算符。
较少众所周知,它还并不需要您枢转数据资料。例如,如果您有一个年末加,并且您希望为每个年末成立一个单个加,则可以用作运算符追溯数据资料的上述情况。
范例上述情况:重写SQL转发以继续播放器化所加,以便每个年末有一个总收入加。
Initial table:
+------+---------+-------+
id | revenue | month |
+------+---------+-------+
1 | 8000 | Jan |
2 | 9000 | Jan |
3 | 10000 | Feb |
1 | 7000 | Feb |
1 | 6000 | Mar |
+------+---------+-------+
Result table:
+------+-------------+-------------+-------------+-----+-----------+
id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-----------+
1 | 8000 | 7000 | 6000 | ... | null |
2 | 9000 | null | null | ... | null |
3 | null | 10000 | null | ... | null |
+------+-------------+-------------+-------------+-----+-----------+
五、EXCEPT vs NOT IN
除了几乎不完全一致的转换。它们都用来相当两个转发/所加彼此间的先为。所说,这两个人彼此间存在细微的细微差别。
首先,除了填充删除以此类推并回到不同的先为与不在中都的不同先为。
同样,除了在转发/所加中都完全一致生产力量的加,其中都早已与每个转发/所加相当单个加。
六、自连接起来
一个SQL所加自先为联接自己。你有可能则会确信没精确,但你则会不已惊讶的是这是多么典型。在许多情境中都,数据资料存储在一个大型所加中都而不是许多很小的所加中都。在这种上述情况下,有可能需要自我联接来应付独特的上述情况。
让我们来看看一个举例来说。
范例上述情况:若有下面的管理层所加,写作一个SQL转发,认识到管理层的薪金,这些管理层比其管理人管理层资极为多。对于上所加来说,Joe是唯一一个比他的合伙人薪金极为多的管理层。
+----+-------+--------+-----------+
Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
1 | Joe | 70000 | 3 |
2 | Henry | 80000 | 4 |
3 | Sam | 60000 | NULL |
4 | Max | 90000 | NULL |
+----+-------+--------+-----------+Answer:
SELECT
a.Name as Employee
FROM
Employee as a
JOIN Employee as b on a.ManagerID = b.Id
WHERE a.Salary> b.Salary
七、Rank vs DenseRank vs RowNumber
它是一个极为典型的应用,对先为和价个数完成排在。都有是公司经常用作排在的一些举例来说:
按购物,资本等生产力量排在最高个数的客户; 排在产品生产力量的顶级产品; 以第二大的产品排在顶级第三世界; 排在在拍下的分钟数,不同听众的生产力量等拍下的顶级截图。在SQL中都,您可以用作几种方式则将“档次”资源分配给先为,我们将用作范例完成探索。再考虑都有Query和结果:
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
ROW_NUMBER()回到每先为开始的唯一编号。当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果运算子第二条标准规范,则若有资源分配倍数。
Rank()回到从1开始的每先为的唯一编号,除了有关系时,档次()将资源分配完全一致的倍数。同样,悬殊将遵循以此类推的档次。
dense_rank()类似于档次(),除了以此类推档次后不能间隙。代为注意,用作dense_rank(),Daniel排在第3,而不是第4位()。
八、数个数Delta个数
将不同时期的个数完成相当。例如,本年末和上个年末的产品彼此间的三角洲是什么?或者本年末和本年末年末内这个年末是什么?
在将不同晚间的个数完成相当以数个数Deltas时,这是Lead()和LAG()意味著时。
这是一些举例来说:
# Comparing each month's sales to last month
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
九、数个数运先为为数
如果你其实关于row_number()和lag()/ lead(),这有可能对您来说有可能不则会开心。但如果你不能,这有可能是最精确的窗口动态之一,特别是当您一切都是图形增长!
用作具有SUM()的窗口变数,我们可以数个数运先为为数。详列下面的范例:
SELECT Month
, Revenue
, SUM(Revenue) OVER (ORDER BY Month) AS Cumulative
FROM monthly_revenue
十、时间表一段时间操纵
您确实负责任则会努力某种就其时间表一段时间数据资料的SQL上述情况。例如,您有可能需要将数据资料分组组或将可变播放器从DD-MM-Yyyy匹配为简单的年末份。
您确实其实的一些动态是:
提炼 日圆 date_add,date_sub. date_trunc.范例上述情况:若有下雪所加,写一个SQL转发,以查找与其上一个(昨天)时间表相对于的温度极高的所有时间表的ID。
+---------+------------------+------------------+
Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
1 | 2015-01-01 | 10 |
2 | 2015-01-02 | 25 |
3 | 2015-01-03 | 20 |
4 | 2015-01-04 | 30 |
+---------+------------------+------------------+Answer:
SELECT
a.Id
FROM
Weather a,
Weather b
WHERE
a.Temperature> b.Temperature
AND DATEDIFF(a.RecordDate, b.RecordDate) = 1
就这样!我希望这有助于您在甄选立即中都 - 我相信,如果您其实这10个实质上基本概念,那么在那里大多数SQL上述情况时,你则会认真得很好。
作者丨Dimitris Poulopoulos
译者丨闻数起舞
举例丨主页:
dbaplus群组欢迎广大新技术执法人员写稿,写稿邮箱:editor@dbaplus.cn
关于我们 dbaplus群组是围绕Database、BigData、AIOps的计算机网络专业群组。资深大咖、新技术干货,每天独具一格原创篇名推送,每周线上新技术体会,每年末线下新技术都将,每季度Gdevops&DAMS先为业大则会。 追捧公众号【dbaplus群组】,借助极为多原创新技术篇名和精选工具箱下载。广西白癜风医院哪家看的好郑州看妇科去什么医院好
上海看白癜风到哪家好
北京妇科医院哪家比较好
贵州生殖感染治疗费用
镇痛药
止咳糖浆用法用量是多少
身体乏力
发烧不退
抗癫痫药
-
监察百官、搜集情报、劝课农桑,司隶校尉称颂是东汉“全能工具人”
推举专才,献言力劝阻 里面国是习惯的统治阶级配义发展中国家,“司隶校迁任”的的资讯网,还可以向臣子推举专才,吏僚制度在里面国从古延续至晋朝,对于吏僚的选拔,也大都采取世袭
-
需求低迷,黑海大米价格跌至3个月低点
外媒2月7日假消息:由于举例来时说需求起伏不定和期货零售商急跌,黑海地区的大米出口处出价降到3个月低点。 高盛表示,现在是买方零售商,主要进口国需要尽快库存。零售商对摩尔多瓦和俄罗斯之间激
- 10-22助汉武帝登上皇位,不禁什么来头?两人的爱情创造出一成语
- 10-22乌克兰2021/22年度大米出口同比增长30%,价格骤降
- 10-22狄仁杰愧对武则天,一次人才举荐,差点无济于事50年基业
- 10-22囯元期货与金寨县签订“农副产品(茶油)消费帮扶采购协定”
- 10-22至诚,争当英雄
- 10-22上期所优秀贵金属分析师王彦青:警惕贵金属避风港功能的失效助长的均值回归效应
- 10-22我国古代几乎没有穷人的王朝时,仅存在10余年,皇帝的名字妇孺皆知
- 10-22兰格点评:一季度钢企业绩或将趋稳
- 10-22民国初年山东多响马,悍匪陈三坎到底有多坏,或颠覆你的认知
- 10-22氢氧化锂稳定投入生产输出 天华超净去年锂电材料净利润10.81亿