首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ORDER BY子句中不允许使用常量表达式-否则我应该如何编写case?

在ORDER BY子句中不允许使用常量表达式的问题,其实是由于常量表达式在查询执行时无法确定排序的具体值,因此被禁止使用。在遇到这种情况时,可以通过使用CASE语句来解决。

CASE语句允许根据条件来选择不同的排序方式,以达到类似常量表达式排序的效果。下面是一个示例:

代码语言:txt
复制
SELECT column_name
FROM table_name
ORDER BY 
    CASE
        WHEN column_name = 'value1' THEN 1
        WHEN column_name = 'value2' THEN 2
        ELSE 3
    END;

在这个示例中,根据column_name的不同值,使用CASE语句给出对应的排序值。当column_name等于'value1'时,排序值为1,当column_name等于'value2'时,排序值为2,其他情况下排序值为3。这样就可以根据指定的排序顺序进行排序。

对于CASE语句,可以根据具体的需求来编写不同的条件和排序值。需要注意的是,排序值的类型必须与被排序的列的数据类型兼容。

同时,腾讯云提供了多种产品来支持云计算场景下的数据库服务,包括云数据库 TencentDB 等,可以根据具体需求选择适合的产品。更多信息可以参考腾讯云数据库产品介绍页面:腾讯云数据库产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL命令 FROM(二)

%STARTTABLE 这个可选关键字指定查询优化器应该开始对FROM子句中列出的第一个表执行联接。 其余表的连接顺序留给查询优化器。...FROM子句中查询 可以在FROM子句中指定子查询。 这称为流查询。 查询被视为与表相同的处理方式,包括它在JOIN语法中的使用以及使用as关键字可选地分配别名。...当与TOP子句配对时,查询可以包含ORDER BY子句。 查询可以使用SELECT *语法,但有以下限制:因为FROM子句的结果是值表达式,所以包含SELECT *的查询只能生成一列。...这种SELECT可以用于从函数、运算符表达式常量或宿主变量返回数据。 对于不引用表数据的查询: 如果省略FROM子句,则不管TOP关键字值如何,最多返回一行数据; TOP 0不返回任何数据。...不允许使用SELECT子句。

1.6K40

Greenplum查询优化揭秘

2、简化常量表达式 简化布尔表达式 “x or true” => “true” “ x AND false ” => “false” 3、简化CASE表达式 CASE WHEN 2+2 = 4 THEN...B、视图展开和函数内连都可能会带来新的常量表达式简化的机会 C、简化常量表达式也为统计信息类的函数减少了计算量 2.1.1.2内连简单的SQL函数 create function incr4(int)...SQL函数 1、避免SQL函数调用的代价 2、为简化常量表达式提供新的机会 2.1.1.3 提升IN,EXISTS类型的链接 链接是指吃现在表达式中的查询,通常出现在where或join/on子句中...2、否则,我们不得不为了查询单独做计划树,然后在为父查询做计划时把子查询当做是一个”黑盒子” 2.1.1.5消除外链接 消除外链接的实例 外链接的上层有”严格”的约束条件,且该条件限定了来自nullable...BY需要,添加最后的SORT节点 7、添加LockRows,Limit,ModifyTable节点 1、主要处理查询语句中FROM和WHERE部分 2、同时也会考虑到ORDER BY信息 3、有代价来驱动

1.2K31
  • 计算机小白的成长历程——分支与循环(2)

    就不卖关子了,在switch语句中,我们在case的执行语句中应该加入一个break——终止、停止,这样我们就能让语句的每一项分支给独立起来,如下图所示: 这里大家就可以看到,我们在输入3后,它只打印了我们需要的礼拜三...,这里我们可以总结一下switch语句的完整结构: //switch语句结构 switch (整型表达式) { case 整型常量表达式: 语句; break; } 我们在使用的时候,有几种情况...下面有个问题,既然break在switch语句中能够使用,那我能不能在if语句中使用呢?...,我们使用了上一篇if语句中提到的知识点,省略else的用法,下面我们来测试一下: 从报错中我们可以看到,这里描述的是break的使用范围,break只能在循环或者开关中使用,有朋友可能就会问了,这个循环能理解...接下来我们来对这一部分内容做个小结: 1.在switch语句中switch的判断条件是整型表达式case的分支条件是整型常量表达式; 2.在多分支语句中switch语句比if语句要更简洁; 3.转向语句

    17030

    T-SQL基础(三)之子查询与表表达式

    :warning: 通常我们自己难以发现代码中的逻辑错误,而我们的最终用户尝尝扮演着问题发现者的角色 :joy: 编写语义清晰明了的SQL可以很大程度的避免逻辑上的错误 表表达式表达式,也可称为表查询...标准SQL中不允许在表表达式使用ORDER BY子句,除非ORDER BY子句用于展示之外的其他目的,否则会报错: 除非另外还指定了 TOP、OFFSET...或 FOR XML,否则ORDER BY 子句在视图、内联函数、派生表、查询和公用表表达式中无效.... :warning:在查询表表达式时,除非在外部查询中指定了ORDER BY子句,否则无法保证查询结果集中数据的顺序。...关于是否应该使用视图,仁者见仁,智者见智: 使用SQL Server视图的优缺点 为什么mysql中很少见到使用视图功能?

    1.6K40

    T-SQL基础(三)之子查询与表表达式

    编写语义清晰明了的SQL可以很大程度的避免逻辑上的错误 表表达式表达式,也可称为表查询,是一个命名的查询表达式,表示一个有效的关系表,因此表表达式必须满足以下三个条件: 无法表表达式结果集顺序...标准SQL中不允许在表表达式使用ORDER BY子句,除非ORDER BY子句用于展示之外的其他目的,否则会报错: 除非另外还指定了 TOP、OFFSET 或 FOR XML,否则ORDER BY...⚠️在查询表表达式时,除非在外部查询中指定了ORDER BY子句,否则无法保证查询结果集中数据的顺序。...所有列必须显式指定名称 所有列名必须唯一 表表达式分为:派生表、公用表表达式、视图三种类型。其中,派生表与公用表表达式只适用于单语句范围,即,只存在于当前查询语句中。...关于是否应该使用视图,仁者见仁,智者见智: 使用SQL Server视图的优缺点 为什么mysql中很少见到使用视图功能?

    1.5K10

    SQL解析过程详解

    在SQL里,有很多子句都可以带有表达式,比如 其中SELECT子句中,GROUP BY子句中, WHERE子句中都带有表达式。...1.类型推导 在分析表达式时,会遇到用户输入的常量,我们需要通过类型推导给输入的每一个常量做标记,识别SQL中常量的类型,规则较为简单,如: 2.隐式类型转换 所有的编程语言都会遇到隐式类型转换的问题...4.CASE WHEN表达式的分析 CASE WHEN表达式是一个略显奇葩的表达式,它本身上是一个 值函数(ScalarFunction) ,但又有逻辑判断,返回值又不固定,并且还可以嵌套使用,而且在语法上还有两种形式...题外话,在很久以前,group by 列表中和聚合函数里都是不允许使用表达式的,只能使用单一的值或者列,所以那时也不需要初始投影。用户想使用类似功能时只能通过查询来实现。...MapJoin使用过的人应该都知道有一种Join的优化叫MapJoin,这个名字的本意是Map-side JOIN,就是JOIN运算在MapReduce的Map阶段完成。

    3.6K20

    PHP的基本规则

    >")是不允许存在的,否则会导致文件末尾被意外地注入空白并显示输出。 由__HALT_COMPILER()允许的任意的二进制代码的内容被Zend Framework PHP文件或由它们产生的文件禁止。...不正确的写法将导致PHP解析器认为key是一个常量,进而先判断常量是否存在,不存在时才以key作为下标传入表达式中,同时触发错误事件,产生一条Notice级错误。...表达式中不需要传入变量,如string = 'string',而非string = 'string 还有一些特例,在正则表达式(preg_系列函数和ereg系列函数)中全部使用双引号,这是为了人工分析和编写的方便...为加强可读性,常量中的单词必须以下划线分隔,例如,可以使用EMBED_SUPPRESS_EMBED_ EXCEPTION,但是不允许使用EMBED_SUPPRESSEMBEDEXCEPTION。...switch ($numPeople) { case 1: break; case 2: break; default: break; } switch语句中必须有default。

    5.1K50

    编写高性能SQL

    任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。 http://hovertree.com/menu/oracle/ 2. ...Order by语句 ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。...任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。    仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。...解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式。  5....相信绝大多数人会使用第一种格式,因为它比较容易编写,而实际上第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符查询改写为使用EXISTS的查询。

    2.3K20

    T-SQL基础(一)之简单查询

    注意,在SELECT子句之前执行的子句无法使用SELECT子句中的列的别名,否则会返回Invalid column name错误。...如,WHERE子句中的多个表达式的计算并没有确定的顺序。 CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE表达式,不是语句,与COUNT类似。...CASE表达式有两种使用方式: CASE后面带有列名 这种情况下,WHEN子句中只能使用标量或返回标量的表达式,这种形式称为简单格式。...CASE后面不带列名 这种情况下,WHEN子句中只能使用逻辑表达式,这种形式称为搜索格式。...通常单表查询仅需一句SELECT语句即可,简单且数据库 联接查询 INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN 查询 SQL可以在一个查询语句中编写另外一个查询语句

    4.2K20

    嘿~这里有一份超实用的 switch 教程,真的好想推荐给你

    具体的使用方法如下 ? 这三种结构的用法都很简单,大家课后自己练习编写一两个小程序就好,就不举例了~ ?...这里每个 case 后边的常量是匹配 switch 后边表达式的值,case 后边必须跟一个常量值,而不能是一个范围,如果所有的 case 均没有匹配的,那么执行 default 的内容,default...但是直接像上面那么书写程序是容易出现问题的,因为switch 语句中case 和 default 事实上都是“标签”,用来标志一个位置而已。...当 switch 跳到某个位置之后,就会一直往下执行,比如说它满足了 case 常量表达式1 的要求之后会自动执行剩下的所有的语句和程序块,而无需判断是否满足前面所对应的 case 。...2.2 分支结构的嵌套 如下图所示,在一个 if 语句中包含另一个 if 语句,我们就称之为 if 语句的嵌套,也叫分支结构的嵌套。 ? 比如说我们尝试编写下面的流程图的所对应的程序 ?

    85220

    【C语言总集篇】分支与循环篇——从不会到会的过程

    a>b && b>c; (3)变量与常量作为判断对象的书写形式 判断对象如果是变量和常量之间的判断,建议写成常量判断变量,如i == 5可以将这个表达式写成5 == i; (4)if语句中代码块的使用...,这里我们可以总结一下switch语句的完整结构: //switch语句结构 switch (整型表达式) { case 整型常量表达式: 语句; break; } 我们在使用的时候,有几种情况...下面有个问题,既然break在switch语句中能够使用,那我能不能在if语句中使用呢?...接下来我们来对这一部分内容做个小结: 在switch语句中switch的判断条件是整型表达式case的分支条件是整型常量表达式; 在多分支语句中switch语句比if语句要更简洁; 转向语句break...在使用时只需要goto加上前面有加冒号的标识符; 3.适用场合: 从上述例子我们可以看到,如果我们在代码中随意乱用标识符的话就很容易产生bug,那我们应该如何使用呢?

    35110

    T-SQL进阶:超越基础 Level 2:编写查询

    使用查询时还需要考虑以下几点: ntext,text和image数据类型不允许从子查询返回 ORDER BY子句不能用于查询,除非使用TOP操作符 使用查询的视图无法更新 COMPUTE和INTO...在本节中,将提供一系列示例,演示如何使用查询 作为表达式或与比较运算符以满足不同的业务需求。...使用查询来控制TOP条款的示例 使用TOP子句返回的行数可以由表达式控制。 清单5中的代码标识了应该根据TOP子句中查询返回的Sales.SalesOrderDetail行的数量。...查询可以被认为是返回一组记录的查询,因此它可以像FROM表一样在FROM子句中使用。 清单7中的查询显示了如何在FROM子句中使用查询。...使用具有IN关键字的查询的示例 您可以编写一个返回列的多个值的查询的地方是当您的查询生成与IN关键字一起使用的记录集时。 清单9中的代码演示了如何使用查询将值传递给IN关键字。

    6K10

    100天精通Golang(基础入门篇)——第8天:Go语言程序的流程结构和条件语句

    在今天的学习中,我们将深入探讨程序的流程结构和条件语句,为编写更加灵活和可控的代码打下坚实的基础。 在程序的流程结构中,我们将学习顺序结构以及如何使用不同的控制结构来控制程序的执行流程。...,否则编译器会报错的。...在switch语句中,我们使用case关键字来定义不同的情况,并在每个case后面跟随相应的代码块。 switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。...类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。...fallthrough应该是某个case的最后一行。

    13910

    Java基础:Java流程控制

    特点:①使用synchronized(){}包裹起来的代码块;②在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性;③同步代码块需要写在方法中。...case 标签可以是:① 类型为char、byte、short 或 int 的常量表达式。②枚举常量。③从 Java SE 7 开始,case 标签还可以是字符串字面量。...for 语句的第 1 部分通常用于对计数器初始化;第 2 部分给出每次新一轮循环执行前要检测的循环条件;第 3 部分指示如何更新计数器。...与 C++ 一样,尽管 Java 允许在 for 循环的各个部分放置任何表达式,但有一条不成文的规则:for 语句的 3 个部分应该对同一个计数器变量进行初始化、检测和更新。...若不遵守这一规则,编写的循环常常晦涩难懂。

    92550

    常用SQL语句和语法汇总

    现在是相当的佩服那个老师,他自己从事的Android开发,让学生学数据库。那应该算是第一次接触数据库这种东西,从此对它念念不忘(论一个老师对学生的影响力!)...ORDER BY子句通常写在SELECT语句的末尾 排序键包含NULL时,会在开头或者末尾进行汇总 在ORDER BY子句中可以使用SELECT子句中定义的别名 在ORDER BY子句中可以使用SELECT...SQL常用规则5 表中存储的是实际数据,而视图中保存的是从表中提取数据所使用的SELECT语句 应该将经常使用的SELECT语句做成视图 定义视图时不要使用ORDER BY子句 视图和表需要同时进行更新...CASE 表达式 CASE WHEN THEN WHEN THEN WHEN...ELSE END SQL常用规则6 谓词就是返回值为真值的函数 通常指定关联查询作为EXIST的参数 作为EXIST参数的查询中经常会使用SELECT * CASE表达式中的END不能省略

    3.1K80

    C语言编程时90%的小伙伴常犯的18种错误

    相信这么努力的你 已经置顶了 老九学堂 你身边的IT导师 ? C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”。...看着有错的程序,不知该如何改起,大雄通过对C的学习,积累了一些C编程时常犯的错误,写给各位小伙伴以供参考。...整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。...14 定义数组时误用变量 int n; scanf(“%d”,&n); int a[n]; 数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。...x:y; return(z); } 形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为: int max(x,y) int x,y; { int z; z=x>y?

    77060

    MySQL 查询专题

    ❑ GROUP BY子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同的表达式。不能使用别名。...使用 HAVING 时应该结合GROUP BY 子句,而 WHERE 子句用于标准的行级过滤。 一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。...在指定一条 ORDER BY 子句时,应该保证它是SELECT语句中最后一条子句,否则这将报错 不限制是否使用非选择列进行排序 除了能用列名指出排序顺序外,ORDER BY 还支持按相对列位置进行排序,...where item_price >= 10 ) 列必须匹配 在 WHERE 子句中使用查询(如这里所示),应该保证SELECT语句具有与 WHERE 子句中相同数目的列。...使用正则表达式,可以编写查找所需行的非常复杂的匹配模式。虽然这些搜索机制非常有用,但存在几个重要的限制。

    5K30

    MySQL基础(快速复习版)

    select * from 表名 4、查询常量 select 常量值; 注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要 5、查询函数 select 函数名(实参列表); 6、查询表达式...,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2 ②case情况1 case 变量或表达式或字段 when 常量1 then 值1 when 常量2 then 值2 … else...by、distinct、having、union、 ②join ③常量视图 ④where后的查询用到了from中的表 ⑤用到了不可更新的视图 七、视图和表的对比 关键字 是否占用物理空间 使用 视图...2、case结构 功能:实现多分支 语法1: case 表达式或字段 when 值1 then 语句1; when 值2 then 语句2; … else 语句n; end [case]; 语法2:...case when 条件1 then 语句1; when 条件2 then 语句2; … else 语句n; end [case]; 位置: 可以放在任何位置, 如果放在begin end 外面,作为表达式结合着其他语句使用

    4.5K20

    那些年我们写过的T-SQL(上篇)

    这人再次提及SELECT字句中别名的使用范围,只能是SELECT字句执行之后的部分,也就是Order by字句。...此外,有一点曾经困扰了很久,就是如果在where字句中使用YEAR(orderdate),还在select中使用YEAR(orderdate),那样不是重复计算了?...此外,该字句中可以使用不在SELECT列表中的字段排序,但如果使用了DISTINCT关键字,则必须使用SELECT列表中的列,否则由于单个结果行可能代表多个原行,造成排序的不清晰。...SQL支持在查询内编写查询,外部查询返回结果集,内部查询的结果集被外部查询使用,称之为查询。如果子查询不依赖其所属外部查询,称之为无关子查询,反之为相关子查询。...[order] AS o2 WHERE o2.uid = o1.uid) EXISTS谓词 接受一个查询作为输入,如果子查询返回任意行返回TRUE,否则FALSE,这也是SQL中少有的2值逻辑场景

    3.1K100
    领券