Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.51 KB | None | 0 0
  1. ### задание 1
  2.  
  3. // Самое простое - найти того, кто больше всех косячит, топ-10 тех, кто накосячил (правильный ответ не равен его ответу) больше всех
  4. SELECT SUM(`jud` != `cjud`) `count_errors`, `login`
  5. FROM `ratings`
  6. GROUP BY `login`
  7. ORDER BY `count_errors` DESC
  8. LIMIT 10
  9.  
  10. // но можно простить косяки, если чел сделал что-то полезное, т.е., можно их оценивать по "полезности" - разности правильных и неправильных ответов
  11. SELECT SUM(`jud` != `cjud`) `count_errors`, SUM(`jud` = `cjud`) `count_ok`, (SUM(`jud` = `cjud`) - SUM(`jud` != `cjud`)) `useful`, `uid`
  12. FROM `ratings`
  13. GROUP BY `uid`
  14. ORDER BY `useful` ASC
  15. LIMIT 10
  16.  
  17. ### Задание 2
  18. // Самое очевидное, что хочется сделать - это посчитать, сколько времени уходит на задачу в среднем, глядя на начало и конец - 33112.43381138848
  19. SELECT AVG(`time`) FROM (
  20.     SELECT ((`closed_ts` - `assigned_ts`) / `microtasks`) `time` FROM `times`
  21. ) `t1`
  22.  
  23. // Поумнее будет выбрать разницу во времени между тем, как сдали предыдущую задачу и текущую задачу, время выглядит правдоподобнее - 1352.0834174937609
  24. SELECT AVG(`time`) FROM (
  25.     SELECT (TIMESTAMPDIFF(SECOND, `t1`.`closed_ts`, MIN(`t2`.`closed_ts`)) / `t2`.`microtasks`) `time`
  26.     FROM `times`  `t1`
  27.     JOIN `times` `t2` ON (`t1`.`login` = `t2`.`login` AND `t1`.`closed_ts` < `t2`.`closed_ts`)
  28.     GROUP BY `t1`.`closed_ts`, `t1`.`login`
  29.     ORDER BY `t1`.`closed_ts` ASC
  30. )`t3`
  31.  
  32. // Ещё высчитать, сколько минимально он тратит на единицу, а не в среднем, потому что минимальное время - вероятнее всего то, когда он не ходит за чаем, а нормально работал - 2.4 секунды на 1 задачу, т.е. за неё нужно заплатить N / 30 * 2.4
  33. SELECT MIN(`time`) FROM (
  34.     SELECT (TIMESTAMPDIFF(SECOND, `t1`.`closed_ts`, MIN(`t2`.`closed_ts`)) / `t2`.`microtasks`) `time`
  35.     FROM `times`  `t1`
  36.     JOIN `times` `t2` ON (`t1`.`login` = `t2`.`login` AND `t1`.`closed_ts` < `t2`.`closed_ts`)
  37.     GROUP BY `t1`.`closed_ts`, `t1`.`login`
  38.     ORDER BY `t1`.`closed_ts` ASC
  39. ) `t3`
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement