Это продолжение этого 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"
Спасибо.
что такое erro –
Я думаю, вы только что получили скобки wro ng, IF имеет 3 параметра, сначала условие, второе значение, если условие истинно, и 3-е значение, если оно ложно. но ваша скобка закрывается после условия –
@VipinJain Позвольте мне обновить. –