2016-01-08 2 views
0

Это продолжение этого question, которое я опубликовал ранее.DATEDIFF, если значение NOT NULL

Я расчета суммы DATEDIFF используя следующий синтаксис

SUM(DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from))/COUNT(DISTINCT e.company_id) 

Что я хочу сейчас, чтобы вычислить SUM из DATEDIFF только если e.time_period_from is NOT NULL

Я попробовал следующий запрос.

SUM(IF(e.time_period_from IS NOT NULL), DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0)/COUNT(DISTINCT e.company_id) 

Это дает мне синтаксическую ошибку SQL.

Как это сделать?

UPDATE:

Вот мой полный MySQL Query

SELECT 
    SQL_CALC_FOUND_ROWS 
    u.id, 
    u.name, 
    u.email, 
    COUNT(DISTINCT(question_id)) as number_of_answered_questions, 
    (SELECT option_id FROM answer WHERE user_id = u.id GROUP BY option_id ORDER BY COUNT(option_id) DESC LIMIT 1) as option_id, 
    SUM(IF(e.time_period_from IS NOT NULL), DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0)/COUNT(DISTINCT e.company_id) AS tenure_in_days 
FROM 
    user u 
LEFT JOIN 
    role r ON (r.id = u.role_id) 
LEFT JOIN 
    answer a ON (a.user_id = u.id) 
LEFT JOIN 
    employment e ON (e.user_id = u.id) 
WHERE 
    r.slug = 'app_user' 
GROUP BY 
    u.id 
LIMIT 
    0, 10 

Как вы видите, это для суб выбора я не могу поставить где состояние за его пределами.

И вот ошибка, которую я получаю.

"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '), DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0)/COUNT(D' at line 1" 

Спасибо.

+0

что такое erro –

+1

Я думаю, вы только что получили скобки wro ng, IF имеет 3 параметра, сначала условие, второе значение, если условие истинно, и 3-е значение, если оно ложно. но ваша скобка закрывается после условия –

+0

@VipinJain Позвольте мне обновить. –

ответ

1

как в моем комментарии, прежде чем я думаю, что вам надо просто установить скобки неправильно, что вы хотите, чтобы получить это:

SUM(IF(e.time_period_from IS NOT NULL, DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0)) 
/COUNT(DISTINCT e.company_id) 
+0

Спасибо Кай за указание, он работает :) –

1

я проверить ошибку запроса в этой строке

SUM(IF(e.time_period_from IS NOT NULL), DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0) 

использовать это вместо того, чтобы выше строки кода

SUM(IF(e.time_period_from IS NOT NULL, DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from), 0));