算术与运算符
在 SQL 中进行加、减、乘、除运算
算术与运算符 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
在 SELECT 中进行数学运算
SQL 不只是用来获取行。您可以在查询中直接使用算术运算符计算值。
在本课中,您将使用列和字面量进行加、减、乘、除运算,为结果命名,并了解 PostgreSQL 如何确定每个结果的类型。
假设有一个包含 quantity 和 unit_price 的 order_items 表。我们无需修改应用程序代码,就能计算每一行的总额。
SELECT quantity, unit_price, quantity * unit_price AS line_total
FROM order_items;五种算术运算符
PostgreSQL 支持常用的运算符:
+加法-减法*乘法/除法%取模(余数)
它们对数值列和字面量的作用与在任何编程语言中一样。下面的查询展示了每种运算符的实际用法。
SELECT
10 + 3 AS sum,
10 - 3 AS difference,
10 * 3 AS product,
10 / 3 AS quotient,
10 % 3 AS remainder;运算符优先级
SQL 遵循标准的数学优先级:*、/ 和 % 的优先级高于 + 和 -。
请使用括号明确表达意图,并覆盖默认的运算顺序。下面两个表达式会产生截然不同的结果。
SELECT
2 + 3 * 4 AS without_parens, -- 14
(2 + 3) * 4 AS with_parens; -- 20计算折后价格
一个常见的实际任务是应用百分比折扣。将价格乘以 (1 - discount_rate) 即可。
这里的 discount_rate 以小数形式存储(0.15 = 15%)。括号可以确保先进行减法,再进行乘法。
SELECT
product_id,
price,
discount_rate,
price * (1 - discount_rate) AS final_price
FROM products;跨列进行算术运算
操作数不一定是字面量。您可以在一个表达式中组合多个列。
下面我们计算每笔销售的净利润:收入减去成本,再乘以售出的数量。
SELECT
sale_id,
(sale_price - cost) * quantity AS profit
FROM sales;使用 AS 命名结果
如果不为计算列设置别名,系统会自动生成类似 ?column? 的名称。请始终使用 AS 来设置易读的名称。
使用别名还可以让您在工具和报表中更清晰地引用该列。
SELECT
base_salary,
base_salary * 0.10 AS bonus,
base_salary + base_salary * 0.10 AS total_pay
FROM employees;在 WHERE 中进行算术运算
您也可以在 WHERE 子句中使用算术运算,而不只是用于 SELECT。
这会筛选出计算所得总额超过 100 的订单。注意:对列进行数学运算可能会导致索引无法使用,因此在性能很重要时,筛选条件应优先直接使用列。
SELECT order_id, quantity, unit_price
FROM order_items
WHERE quantity * unit_price > 100;结果类型取决于输入
PostgreSQL 会根据操作数推断结果类型。整数加整数得到整数;如果任一侧是 numeric 或 float,结果也会采用相应类型。
这在除法中尤为重要,我们稍后会详细介绍。目前请注意,混合不同类型会提升结果的类型。
SELECT
pg_typeof(4 + 2) AS int_type, -- integer
pg_typeof(4 + 2.0) AS numeric_type, -- numeric
pg_typeof(4 * 1.5); -- numeric取模运算符
% 返回整数除法的余数。它适用于循环逻辑,例如“每隔 N 行”或检查数值的奇偶性。
下面我们使用 % 2 = 0 找出偶数的产品编号。
SELECT product_id, name
FROM products
WHERE product_id % 2 = 0;使用算术运算更新值
算术运算并不局限于 SELECT。您可以在 UPDATE 中使用它来调整存储的值。
下面的操作会将某个类别中的每个价格提高 5%。右侧的表达式会针对每一行进行计算。
UPDATE products
SET price = price * 1.05
WHERE category = 'electronics';注意 NULL
任何涉及 NULL 的算术运算都会得到 NULL,因为结果是未知的。
如果某列可能缺少值,请在进行数学运算前使用 COALESCE 为其提供默认值。
SELECT
base + NULL AS is_null, -- NULL
base + COALESCE(bonus, 0) AS safe_total
FROM payroll;快速检查
在 PostgreSQL 中,表达式 2 + 6 / 2 的计算结果是什么?
回顾
您可以直接在 SQL 中计算值:
+ - * / %是核心运算符*、/、%的优先级高于+和-;请使用括号明确表达意图- 使用
AS为计算列设置别名 - 算术运算可用于
SELECT、WHERE和UPDATE - 结果类型取决于操作数,任何为
NULL的操作数都会使结果变为NULL
接下来我们将学习如何对这些数值结果进行四舍五入和截断。
常见问题解答
「算术与运算符」课时是免费的吗?
是的 — 「算术与运算符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「算术与运算符」这节课中我会学到什么?
在 SQL 中进行加、减、乘、除运算 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「算术与运算符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。