2015-11-01 2 views
-1

Если бы я должен был иметь некоторые MySQL, такие как:Пара полезных MySQL SUM расспрашивает

 $stmt = $conn->prepare("SELECT SUM(`num1`) + SUM(`num2`) FROM database.table WHERE `id` = :id"); 
     $stmt->bindParam(':id', $ident, PDO::PARAM_INT, 11); 
     $stmt->execute(); 
     $sum2 = $stmt->fetchAll(); 

И позволяет предположить, что соответствующие значения num1 составляет 20 и num2 имеет нулевое значение, следует ожидать, чтобы получить $ sum2 [0] [0] значение 20 или null?

Кроме того, при использовании функции СУММ, если готов выбрать быть как отображается или:

 $stmt = $conn->prepare("SELECT SUM(`num1` + `num2`) FROM database.table WHERE `id` = :id"); 

Или это не особенно важно?

+0

Если какое-либо значение равно NULL, результат равен NULL. Попробуйте в консоли или в Phpmyadmin с помощью 'select 1 + null' или любой другой математической операции. Если вы используете SUM на Mysql, вам нужно также использовать GROUP BY. –

+0

Когда вы начинаете печатать * Пара вопросов *, пожалуйста, помните, что это ** вопрос и ответ ** сайт. Обратите внимание, что ни ** вопрос **, ни ** ответ ** не являются множественными. –

+0

Я считаю, что есть два вопроса, которые, как оказалось, потенциально связаны с конечным результатом. Один из них использует SUM и добавляет значения NULL, а другой определяет, изменила ли эта структура подготовленной инструкции каким-либо образом. Если нет, извините за замешательство, но он по-прежнему выглядит как два релевантных вопроса для меня ... – Cassandra

ответ

1

Использование MySQL if потому SUM(any) + NULL = NULL

IF(num1 IS NULL,0,num1) 
IF(num2 IS NULL,0,num2) 

или использовать так: -

SELECT IFNULL(SUM(num1), 0) 

или использовать IFNULL

IFNULL(SUM(num1), 0) 

или использовать COALESCE

COALESCE(SUM(num1), 0) 
+0

Блестящий! Тестирование сейчас .....! – Cassandra

+0

Успех, высоко ценится! Обширные варианты ответа также помогли. :) – Cassandra

+0

это мое удовольствие :) @Cassandra –

1

sum() игнорирует NULL значения. Таким образом, он возвращает NULL, когда все значения NULL.

С другой стороны, при добавлении двух чисел результат NULL, если он равен NLLL.

Таким образом, в первом запросе, если у вас есть только одна строка, то результат NULL, потому что sum(num2) является NULL и добавление имеет NULL результат.

Во втором случае - с одной строкой - тогда значение также будет NULL. Тем не менее, с несколькими строками, это приведет к игнорированию строк, где любой столбец имеет значение NULL.

+0

Итак, независимо от того, что я делаю в отношении моего подготовленного выбора, и предполагая, что идентификатор будет только смотреть на результат для одной строки, если одно из двух значений равно NULL, тогда мой результат будет NULL. Есть ли способ, которым я могу получить результат NULL, чтобы вести себя как результат 0, чтобы (в моем примере) 20 + NULL будет действовать как 20 + 0 и равен 20? – Cassandra