order by 后边可以接任何一个数值,无论是数字,还是时间,还是字符串;也无论是通过字段名称返回的一个字段数值,还是写死的一个固定数值,还是通过表达式计算后得到的一个数值。表达式可以是一个通过运算符号拼接而成的计算式,也可以是一个函数,甚至可以是一个查询语句(只要这个查询语句返回的结果是一个数值,而不是一个集合,即只有一行一列的查询结果),当然也可以将以上种种组合起来形成一个复杂的表达式,只要表达式返回的结果是一个数值,那么都可以接在order by 的后边。
回到这题来看,subject 是字段名称,使用了关键字IN(在某些数据库中这样的写法是不受语法支持的,比如SQL Server,但在mySql中是可以这样写的)。正如题目第一行所描述的那样,这个表达式返回的结果要么是0要么是1,是一个数值,放在order by的后边没有任何问题。这个表达式计算的结果,就是当前行的学科是否是化学或物理,如果是返回1,否则返回0。order by默认是升序,并且这个表达式的优先级是最高的,因此,化学和物理以外的学科统统排到了他们前边。
回到这题来看,subject 是字段名称,使用了关键字IN(在某些数据库中这样的写法是不受语法支持的,比如SQL Server,但在mySql中是可以这样写的)。正如题目第一行所描述的那样,这个表达式返回的结果要么是0要么是1,是一个数值,放在order by的后边没有任何问题。这个表达式计算的结果,就是当前行的学科是否是化学或物理,如果是返回1,否则返回0。order by默认是升序,并且这个表达式的优先级是最高的,因此,化学和物理以外的学科统统排到了他们前边。