[英]MySQL> Adding integers and null values
問題:我們如何正確處理至少一個操作數是 NULL 的表的不同列的算術運算?
背景:我們有一些從公共領域挖掘出來的數據,並導入到 MySQL。 有一些文本字段和一些 integer 字段。 數據挖掘器將所有缺失的字段視為 NULL,而不是將值 0 分配給缺失的 integer 字段,並將 NULL 分配給缺失的文本字段。
我可以用這個簡單的表定義重新創建我們的問題:
CREATE TABLE employee
(
id INT AUTO_INCREMENT,
name VARCHAR(40),
salary INT,
bonus INT,
PRIMARY KEY(id)
);
我正在按如下方式填充此示例表
INSERT INTO employee(name, salary, bonus)
VALUES('Keith', 120000, 10000), ('Larson', 110000, 8000),
('Angelina', 125000, 12500), ('Will', 75000, null),
('Mary', 80000, null), ('Steve', null, null), ('John', null, null);
查詢
SELECT * FROM employee;
產量
+----+----------+--------+-------+
| id | name | salary | bonus |
+----+----------+--------+-------+
| 1 | Keith | 120000 | 10000 |
| 2 | Larson | 110000 | 8000 |
| 3 | Angelina | 125000 | 12500 |
| 4 | Will | 75000 | NULL |
| 5 | Mary | 80000 | NULL |
| 6 | Steve | NULL | NULL |
| 7 | John | NULL | NULL |
+----+----------+--------+-------+
對於算術運算,列中的 NULL 值被視為 0。 這就是為什么
SELECT SUM(salary) FROM employee;
產量
+-------------+
| SUM(salary) |
+-------------+
| 510000 |
+-------------+
但是,當跨列執行算術運算,並且至少有一個操作數是 NULL 時,返回的值是 NULL。 例如:
SELECT name, (salary + bonus) FROM employee;
產量
+----------+------------------+
| name | (salary + bonus) |
+----------+------------------+
| Keith | 130000 |
| Larson | 118000 |
| Angelina | 137500 |
| Will | NULL |
| Mary | NULL |
| Steve | NULL |
| John | NULL |
+----------+------------------+
我希望我的查詢為 Will 返回 75000,為 Mary 返回 80000(除了 Keith、Larson 和 Angelina 的正確值之外)。
使用coalesce
。 這是演示。
SELECT
name,
(salary + coalesce(bonus, 0)) as total
FROM employee;
output:
| name | total |
| -------- | ------ |
| Keith | 130000 |
| Larson | 118000 |
| Angelina | 137500 |
| Will | 75000 |
| Mary | 80000 |
| Steve | null |
| John | null |
為了安全起見,您可以使用(coalesce(salary, 0) + coalesce(bonus, 0))
,因此您的結果不會顯示null
。
您可以使用 IFNULL。
SELECT
name,
salary + IFNULL(bonus, 0) as total
FROM employee;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.