MySQL根据给定的晚期百分比

时间:2017-11-05 20:34:56

标签: mysql

我有以下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

2 个答案:

答案 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;
}