SQL MOD()简介
标准查询语言(SQL)中的MOD函数接受两个数字数据类型的参数,第一个参数为红利,第二个参数为除数,并在进行除法操作或重复减法后返回余数或模数。它与REMAINDER和FLOOR函数类似。
MOD()的基本功能是基于下面的代数表达式。
m - n*(FLOOR(m/n));
除了ORACLE数据库,大多数SQL数据库都使用上述表达式。
在不支持MOD()函数的数据库中,特别是SQL Server和Azure SQL数据库,我们可以使用'%'百分比符号。它执行同样的功能。
语法和参数
编写MOD()函数的基本语法如下。
MOD(argument_1,argument_2);
我们甚至可以在一些MOD不是内置函数的数据库中使用以下语法。
Argument_1 % Argument_2;
上述语法中使用的参数如下。
- Argument_1:需要除以的数字数据值或表达式。它是经典数学中的红利。
- 参数2:除以第一个参数的数字数据值或表达式。它是经典数学中的除数。
MOD()函数可以作为任何SQL语句或子句的一部分使用,如SELECT, WHERE, HAVING等。
例子
下面是几个查询示例,说明SQL MOD()函数在不同情况下的使用,如完全可除参数、浮点、双倍数据类型、负数等。
例子#1
用SQL查询来说明SQL MOD()函数的基本功能。
SELECT MOD(20,2);
当我们用20除以2时,得到的余数是0,因为20完全可以被2整除,该函数也是如此。
SELECT MOD(98,3);
给定的查询返回98除以3得到的余数,即2。
SELECT MOD(45,3.2);
即使当我们除以浮点或双倍数据类型的值时,MOD也会返回余数。这是因为MOD执行重复减法并达到所需的余数。
代码。
SELECT MOD(25.5,2);
SELECT MOD(51.0,25.5);
SELECT MOD(19,-4);
SELECT MOD(-19,4);
SELECT MOD(0,12);
SELECT MOD(12,0);
大多数SQL数据库服务器在试图找到一个整数值和0的MOD时都会出错,而像Oracle这样的数据库服务器会返回第一个参数或红利。
在讨论了SQL MOD()函数的基本功能之后,让我们尝试一下它的一些使用案例。
为了演示MOD()的可用性,让我们首先创建一个 "sales_details "表,该表包含了与公司每个销售员的销售有关的详细信息。该表的代码片段看起来像这样。
代码。
CREATE TABLE sales_details
(
salesperson_id integer NOT NULL,
salesperson character varying(255) NOT NULL,
store_state character varying(255) NOT NULL,
sales_target numeric NOT NULL,
sales_current numeric NOT NULL
);
在成功创建了sales_details表之后。现在让我们在其中插入一些随机记录,以便在例子中使用。我们可以使用下面的代码片段来执行这项任务。
代码。
INSERT INTO sales_details
(salesperson_id
,salesperson
,store_state
,sales_target
,sales_current)
VALUES
(101,'Danish K','KA',10000,10000),
(102,'Rashmi Sharma','DL',23000,18000),
(103,'Mohak Patel','MH',21000,21000),
(104,'Devika Ramaswamy','TN',10000,8000),
(105,'Reema Ray','WB',0,10000);
在插入操作之后,最终的sales_details表看起来是这样的。
SELECT * FROM public.sales_details
例子#2
计算所有销售人员的目标和当前销售状态的比率的余数。
代码。
SELECT salesperson_id,
salesperson,
store_state,
sales_target,
sales_current,
MOD(sales_target,sales_current) as "Sales Ratio"
FROM sales_details;
例子 #3
找到目标销售额和当前销售额之比的剩余部分小于2000美元的销售人员的详细信息。
代码。
SELECT salesperson_id,
salesperson,
store_state,
sales_target,
sales_current
FROM sales_details
WHERE MOD(sales_target,sales_current) < 2000;
例子 #4
假设公司想把销售人员根据他们的ID分成两组,分别是A组和B组。如果一个销售人员的ID是奇数,他/她就属于团队A,否则就属于团队B。
代码。
SELECT salesperson_id, salesperson, store_state,
CASE MOD(salesperson_id, 2)
WHEN 0 THEN 'TEAM B'
ELSE 'TEAM A'
END AS team
FROM sales_details;
例子 #5
计算两个团队中每个团队的销售人员的数量。
代码。
SELECT
CASE MOD(salesperson_id, 2)
WHEN 0 THEN 'Team B'
ELSE 'Team A'
END AS team,
COUNT(salesperson_id)
FROM
sales_details
GROUP BY team;
例子 #6
假设公司想把它的销售人员根据他们的ID分别分成三个小组A组、B组和C组。设计一个策略来划分销售人员。
代码。
SELECT salesperson_id, salesperson, store_state,
CASE MOD(salesperson_id, 3)
WHEN 0 THEN 'TEAM A'
WHEN 1 THEN 'TEAM B'
ELSE 'TEAM C'
END AS team
FROM sales_details;
例子 #7
计算三个团队中每个团队的销售人员的数量。
代码:例7
SELECT
CASE MOD(salesperson_id, 3)
WHEN 0 THEN 'Team A'
WHEN 1 THEN 'Team B'
ELSE 'Team C'
END AS team,
COUNT(salesperson_id)
FROM
sales_details
GROUP BY team;
结论
SQL MOD()函数返回一个数字数据值除以另一个数字数据值的余数或模数。