ソースコード
create temporary table mean as
select
  test_id,
  avg(point) as meanpt,
  count(1) as count
from test_results
where test_id = '100'
group by test_id;

create temporary table stderr as
select
  '100' as test_id,
  sqrt(sum((r.point - mean.meanpt) * (r.point - mean.meanpt) / mean.count)) as err
from test_results r
inner join mean
on r.test_id = mean.test_id;

select
  r.user_id as USER,
  r.point as PT,
  case
    when e.err > 0 then round(50 + ((r.point - m.meanpt) * 10) / e.err, 1)
    else 50
  end as DEV_VAL
from test_results r
inner join mean m
on r.test_id = m.test_id
inner join stderr e
on r.test_id = e.test_id
where
  r.test_id='100'
order by DEV_VAL desc, r.user_id
;
提出情報
提出日時2023/02/20 10:28:39
コンテスト第5回 SQLコンテスト
問題偏差値の算出
受験者espressivosubito
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量96 MB
メッセージ
テストケース(通過数/総数)
4/4
状態
メモリ使用量
データパターン1
AC
94 MB
データパターン2
AC
96 MB
データパターン3
AC
92 MB
データパターン4
AC
79 MB