来自另一个 CASE 的 MySQL CASE 结果导致 SQL 查询

标签 mysql sql

我有一个相当大的查询,其中一部分是:

... 
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

或者只是包裹起来:

SqlFiddleDemo

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/

相关文章:

mysql - 使用带有 'multi=True' 参数的execute() 函数创建时出现“表不存在”

mysql - 自引用表。 MySQL

php - SQL 查询 - 选择 count(*) 时返回 0

mysql - 在不同的键上加入同一张表两次

mysql - 如何构造复杂的 SELECT 语句

python - 在 python 中使用字符串时剥离 ' or "

php - 全站实时在线人数统计

mysql - SQL 选择类似字符串包含 ' '

sql - 更新表变量

C# MySql 插入或更新具有 78 个单选按钮的调查表单的命令语法