我有一个相当大的查询,其中一部分是:
...
ROUND(AVG(
CASE RA12.answer
WHEN 'L' THEN 3
WHEN 'P' THEN 2
WHEN 'E' THEN 1
ELSE 0
END
),0) as 'avg_presentation_format_raw'
...
...一切正常,包括上面的专栏。我现在需要做的是对上述专栏的结果进行另一个 CASE(或其他)。但是,由于它是在运行时计算的,所以我无法引用它。我猜我需要使用临时变量或其他东西,我发现了一些接近的东西,但没有什么能完全满足我的要求。
我需要的是基于上面的计算列的以下内容:
...
CASE avg_presentation_format_raw <--THIS WON'T WORK BECAUSE IT'S THE CALCULATED COLUMN
WHEN 3 THEN 'Lecture'
WHEN 2 THEN 'Poster'
WHEN 1 THEN 'Either'
ELSE 'Not Specified'
END as 'presentation_format'
...
任何想法或想法表示赞赏!
TIA
最佳答案
像这样使用子查询:
SELECT
CASE t.avg_presentation_format_raw
WHEN 3 THEN 'Lecture'
WHEN 2 THEN 'Poster'
WHEN 1 THEN 'Either'
ELSE 'Not Specified'
END AS 'presentation_format'
(...)
FROM
(
SELECT ROUND(AVG(
CASE RA12.answer
WHEN 'L' THEN 3
WHEN 'P' THEN 2
WHEN 'E' THEN 1
ELSE 0
END),0) AS 'avg_presentation_format_raw'
(...)
FROM (...)
) AS t
或者只是包裹起来:
SELECT
CASE ROUND(AVG(
CASE answer
WHEN 'L' THEN 3
WHEN 'P' THEN 2
WHEN 'E' THEN 1
ELSE 0
END
),0)
WHEN 3 THEN 'Lecture'
WHEN 2 THEN 'Poster'
WHEN 1 THEN 'Either'
ELSE 'Not Specified'
END as 'presentation_format',
ROUND(AVG(
CASE RA12.answer
WHEN 'L' THEN 3
WHEN 'P' THEN 2
WHEN 'E' THEN 1
ELSE 0
END),0) AS 'avg_presentation_format_raw'
FROM tab
但是你不能这样引用:
SELECT
1 AS 'var1'
var1 + 1 AS 'var2'
select 中单行的所有结果都是原子的。也就是说,您可以将它们全部视为并行发生并且不能相互依赖。
关于来自另一个 CASE 的 MySQL CASE 结果导致 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32425787/