Database 如何按顺序获取数据?

Database 如何按顺序获取数据?,database,relational-database,Database,Relational Database,这是一个面试问题 这是一个实际的表Employee: id | name | salary 1 | A | 7000 2 | B | 6000 3 | C | 5000 4 | D | 5500 5 | E | 4000 6 | F | 4800 7 | G | 3000 8 | H | 2000 我想要这样的结果: id | name | salary 1 |

这是一个面试问题

这是一个实际的表
Employee

id  |  name  | salary
1   |    A   | 7000
2   |    B   | 6000
3   |    C   | 5000
4   |    D   | 5500
5   |    E   | 4000
6   |    F   | 4800
7   |    G   | 3000
8   |    H   | 2000
我想要这样的结果:

id  |  name  | salary
1   |    C   | 5000
2   |    D   | 5500
3   |    E   | 4000
4   |    F   | 4800
5   |    G   | 3000
select row_number() over (order by salary) as id
       name,
       salary
where salary between 5000 and 3000
order by salary
我想显示工资在5000到3000之间的记录,但第一列应该是连续的

当我执行查询时,它会显示这个结果

id  |  name  | salary
3   |    C   | 5000
4   |    D   | 5500
5   |    E   | 4000
6   |    F   | 4800
7   |    G   | 3000
[这里]我能写些什么,然后它会给出正确的结果

 select name, salary, [HERE]
 from Employee
 where salary between 5000 and 3000;   
试试这个:

对于MYSQL

SELECT @rownum:=@rownum + 1 as row_number, 
       t.*
FROM ( 
select name, salary from Employee
 where salary between 5000 and 3000) t,
(SELECT @rownum := 0) r

如前所述,对于MS SQL server,可以在本文中找到解决方案:

这是标准的ANSI SQL(由所有现代DBMS支持)

请注意,如果未指定
order by
子句,则行的顺序(在本例中为“生成的”)id是未定义的。要获得“稳定的排序顺序”,您应该使用以下内容:

id  |  name  | salary
1   |    C   | 5000
2   |    D   | 5500
3   |    E   | 4000
4   |    F   | 4800
5   |    G   | 3000
select row_number() over (order by salary) as id
       name,
       salary
where salary between 5000 and 3000
order by salary

是mysql还是其他数据库?还是泛型?似乎是重复的链接-只有答案通常是不赞成的。如果你真的认为这是同一个问题,你应该投票结束这个重复。谢谢这个提示。不幸的是,我目前无法投票赞成作为一个重复关闭,因为我在这个平台上是非常新的。我认为另一个问题的解决方案在这里可能会有所帮助-问题本身并不完全是重复的。从SomeTable中选择ROW_NUMBER()OVER(ORDER BY SomeField)作为ROW,*;它在LAMP中不起作用@user2963592:MySQL不够高级。他们没有跟上现代SQL特性(尽管该标准已经有10年的历史了)。如果您想要一个DBMS特定的解决方案,您应该相应地标记您的问题。至少在问题中提到它,那么我能为MySQL做些什么呢。有什么选择吗?@user2963592:我认为这样做(除了Sashi的回答)效果不好,但当用户只需要一列时,它就失败了。它取决于在SELECT子句中指定的下一列。@AjinkyaKasar:不明白吗?