1

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

3 回答 3

2

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

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

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

于 2013-10-10T19:04:30.007 回答
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
于 2013-10-10T18:59:52.010 回答
-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 
于 2013-10-10T19:12:34.573 回答