2013-11-07 4 views
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, но 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

Это mysql или другая база данных? Или общий? –

+0

Кажется, дубликат http://stackoverflow.com/questions/1293390/sql-to-output-line-number-in-results-of-a-query – gview

+0

его база данных Mysql –

ответ

1

Это стандартный ANSI SQL (поддерживается всеми современными СУБД)

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

Обратите внимание, что порядок строк (и в этом случае «генерируется») идентификатор не определен, если вы не укажете order by положение. Чтобы получить «стабильный порядок сортировки», вы должны использовать примерно следующее:

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

SELECT ROW_NUMBER() OVER (ORDER BY SomeField) AS Row, * FROM SomeTable; его не работает в лампе; –

+0

@ user2963592: MySQL isnt 'достаточно продвинутый. Они не воспользовались современными функциями SQL (хотя этому стандарту уже исполнилось 10 лет). Если вам требуется конкретное решение для СУБД, вы должны соответствующим образом пометить свой вопрос. По крайней мере, упомяните об этом в вопросе –

+0

. Что я могу сделать для MySQL. есть ли какой-либо вариант.? –

0

Попробуйте ::

Для MYSQL ::

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

хорошо работает, но когда пользователь хочет только один столбец, тогда он терпит неудачу. его значение зависит от следующего столбца, который задается в предложении SELECT. –

+0

@AjinkyaKasar: не понял? –

+0

Я ушел от этого запроса спасибо Sashi kant –

0

Как уже отметил, для сервера MS SQL решение можно найти в этом посте: https://stackoverflow.com/a/1293399/2822268

+0

Ссылка только ответы обычно нахмурились. Если вы действительно думаете, что это тот же вопрос, вы должны проголосовать, чтобы закрыть это как дубликат. –

+0

Спасибо за этот типп. К сожалению, я в настоящее время не могу голосовать за закрытие в качестве дубликата, поскольку я очень новичок на этой платформе. Я думал, что решение другого вопроса может помочь здесь - сам вопрос не совсем дублируется. – Cosima

Смежные вопросы