如何顺序获取数据?

时间:2013-11-07 07:00:43

标签: 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   |    C   | 5000
2   |    D   | 5500
3   |    E   | 4000
4   |    F   | 4800
5   |    G   | 3000

我想显示工资在5000到3000之间但第1列应该是连续的记录。

当我执行查询时,它会显示此结果。

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;   

3 个答案:

答案 0 :(得分:1)

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

select row_number() over () as id
       name,
       salary
where salary between 5000 and 3000

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

select row_number() over (order by salary) as id
       name,
       salary
where salary between 5000 and 3000
order by salary

答案 1 :(得分:0)

试试这个::

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

答案 2 :(得分:0)

正如已经评论过的,对于MS SQL服务器,可以在以下帖子中找到解决方案:https://stackoverflow.com/a/1293399/2822268