0

这是一道面试题。

这是一个实际的表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 之间但第一列应该是连续的记录。

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

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;   
4

3 回答 3

1

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

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

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

select row_number() over (order by salary) as id
       name,
       salary
where salary between 5000 and 3000
order by salary
于 2013-11-07T07:23:21.037 回答
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
于 2013-11-07T07:15:25.323 回答
0

如前所述,对于 MS SQL 服务器,可以在这篇文章中找到解决方案:https ://stackoverflow.com/a/1293399/2822268

于 2013-11-07T07:16:54.243 回答