这条sql是错误的,因为sql的执行顺序是from->where->select,where的时候num这个别名根本就还没声明,因为在select的时候才会声明num这个别名,所以肯定会报错。
正确写法是加一个子查询:select * from (select * ,row_number() over(order by id) as num from UserInfo) as t where t.num>=20 and t.num<=30,
先把第一查询的结果声明为t这个表,再从t这个表里面查询,这样就知道num是什么了