[英]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.