SQL 中MOD()函数的介绍及使用

664 阅读4分钟

SQL MOD()

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);

SQL MOD() 1

当我们用20除以2时,得到的余数是0,因为20完全可以被2整除,该函数也是如此。

SELECT MOD(98,3);

SQL MOD() 2

给定的查询返回98除以3得到的余数,即2。

SELECT MOD(45,3.2);

SQL MOD() 3

即使当我们除以浮点或双倍数据类型的值时,MOD也会返回余数。这是因为MOD执行重复减法并达到所需的余数。

代码。

SELECT MOD(25.5,2);

SQL MOD() 4

SELECT MOD(51.0,25.5);

SQL MOD() 5

SELECT MOD(19,-4);

SQL MOD() 6

SELECT MOD(-19,4);

SQL MOD() 7

SELECT MOD(0,12);

SQL MOD() 8

SELECT MOD(12,0);

SQL MOD() 9

大多数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
);

create Table 1

在成功创建了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);

insert table

在插入操作之后,最终的sales_details表看起来是这样的。

SELECT * FROM public.sales_details

select table

例子#2

计算所有销售人员的目标和当前销售状态的比率的余数。

代码。

SELECT salesperson_id,
salesperson,
store_state,
sales_target,
sales_current,
MOD(sales_target,sales_current) as "Sales Ratio"
FROM sales_details;

select table 1

例子 #3

找到目标销售额和当前销售额之比的剩余部分小于2000美元的销售人员的详细信息。

代码。

SELECT salesperson_id,
salesperson,
store_state,
sales_target,
sales_current
FROM sales_details
WHERE MOD(sales_target,sales_current) < 2000;

select table 2

例子 #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;

select table 3

例子 #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;

select table 4

例子 #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;

example 7

例子 #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;

example 8

结论

SQL MOD()函数返回一个数字数据值除以另一个数字数据值的余数或模数。