Mysql:你能在算术中使用CASE语句吗?

时间:2013-10-10 18:57:54

标签: mysql case

以下查询在mysql中是否合法?在其他SQL中?在算术中是否存在不稳定或不可能使用CASE语句的情况?您是否有过这样做的经验,对效率问题的任何想法等? (此操作将同时处理数千条记录的结果集,最终成千上万,但不多。)

SELECT 
  RAND() * 10 * t.weighting * 
    CASE 
      WHEN t.happiness_level > 9.5 THEN 40
      ELSE 20
    END 
    AS priority
FROM table t

3 个答案:

答案 0 :(得分:2)

是的,您的语法可以在MySQL中使用。您还可以使用IF()功能:

SELECT RAND() * 10 * t.weighting * IF(t.happiness_level > 9.5, 40, 20) AS priority
FROM table t

我认为CASE表达式可以移植到大多数SQL实现中。它是一个表达式,因此可以在任何其他表达式类型允许的地方使用。

答案 1 :(得分:0)

你可以使用相反的算术内部case语句:

SELECT 
  CASE 
  WHEN t.happiness_level > 9.5 THEN  RAND() * 10 * t.weighting * 40
  ELSE  RAND() * 10 * t.weighting * 20
END  AS priority
FROM table t

答案 2 :(得分:-1)

以下查询在mysql中是否合法?不,单词table是MySQL中的保留字。你应该添加反引号。但case是合法的。

在其他SQL中?假设您在其他DBMS中的意思。不,RAND()不适用于任何DBMS。 CASE是标准的,因此它适用于大多数DBMS,但IF不适用。

在算术中是否存在不稳定或不可能使用CASE语句的情况?这个问题根本不清楚。

您是否有过这方面的经验,对效率问题的任何想法等?是的。是的,自己应用基本数学并减少服务器上的计算:

RAND() * 10 * t.weighting * 
CASE 
  WHEN t.happiness_level > 9.5 THEN 40
  ELSE 20
END

与:

相同
RAND() * t.weighting * 
CASE 
  WHEN t.happiness_level > 9.5 THEN 400
  ELSE 200
END