SQL CHECKSUM_AGG()函数
校验和返回一个值,该值指示输入值是否随时间改变。校验和有助于识别自上次操作以来值是否发生了更改。此外,SQL包含了一个名为CHECKSUM AGG的函数,用于验证单个或一组值。
SQL CHECKSUM_AGG() 函数返回由给定表达式指定的列的校验和值。它对所有列值求和并计算校验和。如果行或行随时间变化,校验和将相应地改变,表明列中的值发生了改变。CHECKSUM_AGG()函数忽略null值。我们可以使用OVER子句和此函数一起使用。此函数仅适用于数字列。
此函数还允许使用两个可选修饰符ALL和DISTINCT。如果使用ALL,则此函数计算所有值的聚合。如果使用DISTINCT,则此函数返回唯一且非null值的数量。
语法
以下是SQL CHECKSUM_AGG() 函数的语法-
CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )
参数
- expression −一个整数表达式。checksum_agg()不允许使用聚合函数或子查询。
示例
在下面的示例中,我们使用SQL CHECKSUM_AGG()函数来检测客户表的AGE列中的更改。
使用CREATE语句,我们创建了一个名为customers的表−
CREATE TABLE customers(ID INT NOT NULL,
NAME VARCHAR(30) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(30),
SALARY DECIMAL(18, 2));
表格存储了ID、NAME、AGE、ADDRESS和SALARY。现在我们正在使用INSERT语句向customers表中插入7条记录。
INSERT INTO customers VALUES(1, 'Ramesh', 32, 'Ahmedabad', 2000.00);
INSERT INTO customers VALUES(2, 'Khilan', 25, 'Delhi', 1500.00);
INSERT INTO customers VALUES(3, 'kaushik', 23, 'Kota', 2000.00);
INSERT INTO customers VALUES(4, 'Chaitali', 25, 'Mumbai', 6500.00);
INSERT INTO customers VALUES(5, 'Hardik', 27, 'Bhopal', 8500.00);
INSERT INTO customers VALUES(6, 'Komal', 22, 'MP', 4500.00);
INSERT INTO customers VALUES(7, 'Aman', 23, 'Ranchi', null);
下面的SQL查询显示了客户表 –
SELECT * FROM customers;
+----+----------+-----+-----------+---------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+---------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Aman | 23 | Ranchi | NULL |
+----+----------+-----+-----------+---------+
下面的SQL查询显示在age列被更新之后的原始校验和值和更新后的校验和值。−
-- get the checksum value before the column value changed.
SELECT CHECKSUM_AGG(AGE) AS original_checksum from customers;
UPDATE customers SET AGE = 30 WHERE NAME = 'Aman';
--get the checksum of the modified column.
SELECT CHECKSUM_AGG(AGE) AS original_checksum from customers;
输出
以下是上述SQL查询的输出结果−
+--------------------+
| original_checksum |
+--------------------+
| 32 |
+--------------------+
+--------------------+
| original_checksum |
+--------------------+
| 36 |
+--------------------+
示例
在下面的示例中,通过将DISTINCT作为参数之一传递给checksum_agg()函数,对不同的整数值调用该函数。
-- get the checksum of all value.
SELECT CHECKSUM_AGG(AGE) AS original_checksum from customers;
--get the checksum of distinct value.
SELECT CHECKSUM_AGG(DISTINCT AGE) AS original_checksum from customers;
输出
以下是上述SQL查询的输出结果 –
+--------------------+
| original_checksum |
+--------------------+
| 36 |
+--------------------+
+--------------------+
| original_checksum |
+--------------------+
| 61 |
+--------------------+
示例
在下面的示例中,我们使用SQL的CHECKSUM_AGG()函数来检测客户表的SALARY列中的变化。CHECKSUM_AGG()函数始终接受整数类型的列。由于salary列包含小数数据类型,我们必须将其转换为INT。
以下SQL查询显示了SALARY的原始和修改后的校验和 –
--original checksum
SELECT CHECKSUM_AGG(CAST(SALARY AS INT)) AS original_SALARY from customers;
UPDATE customers SET SALARY = 5000 WHERE NAME = 'Aman';
--checksum after modified
SELECT CHECKSUM_AGG(CAST(SALARY AS INT)) AS original_SALARY from customers;
输出
以下是上述SQL查询的输出结果-
+------------------+
| original_SALARY |
+------------------+
| 11288 |
+------------------+
+------------------+
| original_SALARY |
+------------------+
| 16272 |
+------------------+