繁体   English   中英

计算前替换列值

[英]Replacing column values before calculation

那里有3列表格-顺其自然:-订单编号(tck.TICKETID),-表演者(perf.DISPLAYNAME),-表演者完成订单后的反馈。 我需要计算每个执行者的平均值才能做出评分。 并不难:

SELECT 
perf.DISPLAYNAME AS "Performer",
 AVG (tck.mark)
FROM ticket tck
LEFT JOIN (
select 
  displayname, personid,  tck.TICKETID FROM PERSON  per
  left join ticket tck on tck.owner = per.personid
) perf on tck.TICKETID= perf.TICKETID
WHERE 
      tck.MARK IS NOT NULL AND
      perf.DISPLAYNAME IS NOT NULL
GROUP BY  perf.DISPLAYNAME 
ORDER BY  AVG (tck.mark) desc;

但是对我来说有一个问题-麦芽酒以相反的方式存储在数据库中,因此1 = 5; 2 = 4; 3 = 3; 2 = 1

在计算AVG值之前,我需要将其反转,在SELECT中使用CASE尝试过:

CASE AVG(TO_NUMBER(tck.MARK))
    WHEN 1 THEN 5
    WHEN 2 THEN 4 
    WHEN 3 THEN 3 
    WHEN 4 THEN 2 
    ELSE 99
  END AS Mark

但是案例在计算之后是可行的,我需要在之前。 在我看来,这种情况放置不正确,或者我解决任务的方式不是最佳的。

一如既往,我们将非常感谢您提供任何建议。

您只需将案件放入avg即可获得所需的内容。 并且您需要确保您的ELSE值,因为在当前查询中,如果NULL/0都为99

AVG(CASE 
WHEN TO_NUMBER(tck.MARK) = 1 THEN 5
WHEN TO_NUMBER(tck.MARK) = 2 THEN 4 
WHEN TO_NUMBER(tck.MARK) = 3 THEN 3 
WHEN TO_NUMBER(tck.MARK) = 4 THEN 2 
ELSE 99
END) AS Mark

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM