PostgreSQL NULLIF 函数
本文介绍如何使用 PostgreSQL 的 NULLIF 函数来比较两个值并在特定情况下返回 NULL。
PostgreSQL 的 NULLIF 函数用于比较两个表达式,如果它们相等,则返回 NULL,否则返回第一个表达式的值。
你可以在 SELECT 语句以及其他需要进行条件判断的地方使用 NULLIF 函数。
PostgreSQL NULLIF 语法
这里是 PostgreSQL NULLIF 函数的语法:
sql
NULLIF(arg1, arg2)解释:
arg1和arg2是要进行比较的两个表达式。- 如果
arg1和arg2相等,则 NULLIF 函数返回 NULL。 - 如果
arg1和arg2不相等,则返回arg1的值。
PostgreSQL NULLIF 实例
简单示例
先看一个简单的示例。
比如,你有一个表 products,其中包含产品的原价 original_price 和折扣价 discounted_price 字段。你想要计算折扣率,但如果原价和折扣价相等,说明没有折扣,此时应返回 NULL。
sql
SELECT original_price, discounted_price,
NULLIF(original_price - discounted_price, 0) AS discount_amount,
CASE WHEN NULLIF(original_price - discounted_price, 0) IS NULL THEN NULL
ELSE ((original_price - discounted_price) / original_price) * 100 END AS discount_percentage
FROM products;假设表中有以下数据:
| original_price | discounted_price |
|---|---|
| 100 | 80 |
| 50 | 50 |
| 120 | 100 |
查询结果将是:
| original_price | discounted_price | discount_amount | discount_percentage |
|---|---|---|---|
| 100 | 80 | 20 | 20.00 |
| 50 | 50 | NULL | NULL |
| 120 | 100 | 20 | 16.67 |
使用 NULLIF 函数进行条件判断
在另一个场景中,假设你有一个学生成绩表 student_scores,包含学生的考试成绩 score 和平时成绩 classwork_score 字段。如果考试成绩和平时成绩相等,你希望在特定计算中忽略这个学生的数据。
sql
SELECT student_name, score, classwork_score,
NULLIF(score, classwork_score) AS adjusted_score
FROM student_scores;假设表中有以下数据:
| student_name | score | classwork_score |
|---|---|---|
| Alice | 85 | 80 |
| Bob | 90 | 90 |
| Charlie | 75 | 72 |
查询结果将是:
| student_name | score | classwork_score | adjusted_score |
|---|---|---|---|
| Alice | 85 | 80 | 85 |
| Bob | 90 | 90 | NULL |
| Charlie | 75 | 72 | 75 |
结论
在本文中,我们讨论了 PostgreSQL NULLIF 函数的语法,并提供了几个示例。NULLIF 函数在进行条件判断和处理特定情况时非常有用,可以使查询结果更加准确和灵活。它是 PostgreSQL 中一个重要的函数,在实际应用中可以根据具体需求进行灵活运用。😃
