文章
· 二月 9, 2023 阅读大约需 3 分钟

5 个有用的 SQL 函数,让你的 SQL 技能更上一层楼

嗨,大家好

在本文中,我列出了 5 个有用的 SQL 函数,并附有解释和查询示例👇🏻

这5个功能是

  • COALESCE合并
  • RANK排序
  • DENSE_RANK密集排序
  • ROW_NUMBER行号
  • SUM()获取运行总计的函数

那么让我们从 COALESCE 函数开始

#合并

COALESCE 函数按从左到右的顺序计算表达式列表,并返回第一个非 NULL 表达式的值。如果所有表达式的计算结果为 NULL,则返回 NULL。

以下语句将首先返回非空值,即“intersystems”

 SELECT COALESCE ( NULL , NULL , NULL , 'intersystems' , NULL , 'sql' )

让我们创建下表以获取更多示例

CREATE TABLE EXPENSES(    TDATE DATE NOT NULL ,    EXPENSE1 NUMBER NULL ,    EXPENSE2 NUMBER NULL ,    EXPENSE3 NUMBER NULL ,    TTYPE CHAR ( 30 ) NULL )

现在让我们插入一些虚拟数据来测试我们的功能

INSERT INTO sqluser.expenses (tdate, expense1,expense2,expense3,ttype ) SELECT {d '2023-01-01' }, 500 , 400 , NULL , 'Present' UNION ALL SELECT {d '2023-01-01' }, NULL , 50 , 30 , 'SuperMarket' UNION ALL SELECT {d '2023-01-01' }, NULL , NULL , 30 , 'Clothes' UNION ALL SELECT {d '2023-01-02' }, NULL , 50 , 30 , 'Present' UNION ALL SELECT {d '2023-01-02' }, 300 , 500 , NULL , 'SuperMarket' UNION ALL SELECT {d '2023-01-02' }, NULL , 400 , NULL , 'Clothes' UNION ALL SELECT {d '2023-01-03' }, NULL , NULL , 350 , 'Present' UNION ALL SELECT {d '2023-01-03' }, 500 , NULL , NULL , 'SuperMarket' UNION ALL SELECT {d '2023-01-04' }, 200 , 100 , NULL , 'Clothes' UNION ALL SELECT {d '2023-01-06' }, NULL , NULL , 100 , 'SuperMarket' UNION ALL SELECT {d '2023-01-06' }, NULL , 100 , NULL , 'Clothes'

选择数据

现在通过使用 COALESCE 函数,我们将首先从 expense1、expense2 和 expense 3 列中检索非 NULL 值

SELECT TDATE, COALESCE (EXPENSE1,EXPENSE2,EXPENSE3), TTYPE FROM sqluser.expenses ORDER BY 2

#RANK vs DENSE_RANK vs ROW_NUMBER 函数

  • RANK() — 为同一窗口框架内的每一行分配一个排序整数,从 1 开始。如果多行包含相同的窗口函数字段值,则排序整数可以包含重复值。
  • ROW_NUMBER() — 为同一窗口框架内的每一行分配一个唯一的顺序整数,从 1 开始。如果多行包含相同的窗口函数字段值,则每一行都分配一个唯一的顺序整数。
  • DENSE_RANK() 离开 重复排名后没有间隙。

在 SQL 中,您可以通过多种方式为行分配排名,我们将通过示例深入探讨。再次考虑与之前相同的示例,但现在我们想知道最高费用是多少。

我们想知道我在哪里花的钱最多。有不同的方法可以做到这一点。我们可以使用所有 ROW_NUMBER() , RANK() 和 DENSE_RANK() 三个函数 。我们将使用所有三个函数对上一个表进行排序,并使用以下查询查看它们之间的主要区别是什么:

下面是我们的查询:

这三个功能之间的主要区别在于它们处理相同值的方式。我们将进一步深入探讨它们的差异:

  • RANK()----从 1 开始为每一行返回一个唯一的数字。当数值相等时,如果没有定义第二个条件,它会任意分配一个数字。
  • ROW_NUMBER()  -----从1开始为每一行返回一个唯一的数字,除非数值相同,否则它将分配相同的数字。同样,重复的排名后会有空格。
  • DENSE_RANK()-----  重复排名后不留空格。

#计算运行总计

运行总计可能是最有用的窗口函数之一,尤其是当您想要可视化增长时。使用SUM()的窗口函数,我们可以计算累积聚合。

为此,我们只需要使用聚合器SUM()对变量求和,但使用 TDATE 列对该函数进行排序。

您可以观察到相应的查询如下:

正如您在上表中看到的那样,现在我们有了随着日期过去所花金额的累计汇总。

结论

SQL 很棒。上面使用的函数在处理数据分析、数据科学和任何其他与数据相关的领域时可能很有用。

这就是为什么我们应该注意不断提高 SQL 技能的原因。


谢谢

讨论 (0)1
登录或注册以继续