这是一个面试问题。
这是一张实际的表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;
答案 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