在计算前替换列值
Replacing column values before calculation
我有 table 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;
但对我来说有一个问题 - maks 以相反的方式存储在数据库中,所以 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
我有 table 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;
但对我来说有一个问题 - maks 以相反的方式存储在数据库中,所以 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