我有以下SQL,它返回给定日期之间的每个user_id及其attendance_percentage。它也提供准时。这很好用。然而,为了计算准时性,我从100减去晚期百分比。为了工作,用户需要具有大于0的出勤率。因为如果用户具有0%的出勤率,则准时性变为100%,因为他们没有任何迟到的值(这是不正确的)
任何人都有任何想法如何在SQL中解决这个问题?
换句话说,有没有办法说if(avg(late_value)* 100)是否大于0然后是100-(avg(late_value)* 100?
SELECT
user_id,
AVG(value)*100 AS attendance_percentage,
100-(avg(late_value)*100) AS punctuality
FROM test t
WHERE t.session_date BETWEEN '2017-10-01' AND '2017-10-15'
GROUP BY user_id
答案 0 :(得分:0)
尝试:
SELECT
user_id,
AVG(value)*100 AS attendance_percentage,
100-(avg(late_value)*100) AS punctuality, if (avg(late_value)*100)>0, 100-(avg(late_value)*100,0)
FROM test t
WHERE t.session_date BETWEEN '2017-10-01' AND '2017-10-15'
GROUP BY user_id
我无法测试它,但它看起来很合理。
答案 1 :(得分:0)
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql 这不是最好的解决方案,但它可能有效:
/**
* {@inheritdoc}
*/
public function configureBatchActions($actions)
{
if (isset($actions['delete'])) {
unset($actions['delete']);
}
return $actions;
}