以下查询在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
答案 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