MySQL引用,以避免重复我自己

  • 本文关键字:我自己 引用 MySQL mysql
  • 更新时间 :
  • 英文 :


我有这个片段:

SELECT 
    CASE WHEN
        AVG(UNIX_TIMESTAMP(tDone)-UNIX_TIMESTAMP(tIPN))/3600 >= 10
    THEN
        ROUND(AVG(UNIX_TIMESTAMP(tDone)-UNIX_TIMESTAMP(tIPN))/3600,0)
    ELSE
        ROUND(AVG(UNIX_TIMESTAMP(tDone)-UNIX_TIMESTAMP(tIPN))/3600,1)
    END 
FROM
    ...

我能做些什么来消除重复吗?例如:(假设代码如下):

SET var = AVG(UNIX_TIMESTAMP(tDone)-UNIX_TIMESTAMP(tIPN))/3600
SELECT 
    CASE WHEN
        var > 10
    THEN
        ROUND(var,0)
    ELSE
        ROUND(var,1)
    END 
FROM
    ...

使用子查询,您可以执行以下操作:

SELECT 
  CASE WHEN avgtiPN >= 10 THEN ROUND(avgtiPN,0) ELSE ROUND(avgtiPN,1) END 
FROM 
  (SELECT 
     AVG(UNIX_TIMESTAMP(tDone)-UNIX_TIMESTAMP(tIPN))/3600 AS avgtiPN
   FROM
    ...) AS AVGQuery

但我仍然不确定它是否更可读。

可以,但用户定义变量的变量处理顺序未定义。MySQL文档中的这个引用解释了它什么时候有效,什么时候无效。

最新更新