MySQL: Відтворення типу NULL до 0


82

Припустимо наступну таблицю (наприклад, результат декількох внутрішніх операторів об’єднання):

id | column_1 | column_2
------------------------
 1 |  1       | 
 2 |  2       | 2
 3 |          | 3

Що ви могли б отримати, наприклад, із наступного твердження:

select a.id, t1.column_1, t2.column_2
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

Тепер, якщо я хотів би підвести підсумки t1.column_1 та t2.column_2 наступним чином

select 
    a.id, 
    t1.column_1, 
    t2.column_2,
    (t1.column_1 + t2.column_2) as cumulated
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

Результат буде виглядати наступним чином:

id | column_1 | column_2 | cumulated
------------------------------------
 1 |  1       | NULL     | NULL
 2 |  2       | 2        | 4
 3 |  NULL    | 3        | NULL

Моє запитання в основному: чи є спосіб ввести NULL в 0, щоб зарахувати математику?

Я пробував CONVERT(t1.column_1, SIGNED)і CAST(t1.column_1 as SIGNED), але NULLзалишається a NULL.

Відповіді:


154

Використовується IFNULL(column, 0)для перетворення значення стовпця в нуль. Крім того, функція COALESCE зробить те саме, за винятком (1), що COALESCEвідповідає ANSI, IFNULLні, і (2) COALESCEприймає довільну кількість стовпців / значень і повертає перше ненульове значення, передане їй.


і злиття може мати більше одного значення?
ante.sabo

10
Так ... так COALESCE (стовпець1, стовпець2, 0) поверне перше ненульове значення цих значень. Майте на увазі, це працює горизонтально, а не вертикально. Стовпці повинні належати одному рядку таблиці.
Девід Андрес

@rexem: Дякую, це дуже приємно з вашого боку. Цінується!
Девід Андрес

@David Andres Мільйон подяк. Якби тільки я міг проголосувати вдруге.
історія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.