2010-06-15 2 views
16

Мне было интересно, можно ли перечислить возвращенные строки. Не в соответствии с содержимым любого столбца, а просто дает последовательный целочисленный индекс. Например.Как перечислить возвращенные строки в SQL?

select ?, count(*) as usercount from users group by age 

возвращает что-то вдоль линий:

1 12 
2 78 
3  4 
4 42 

это для https://data.stackexchange.com/

+2

Какая СУБД вы используете? – BenV

+0

@benv: это для http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost, тогда соответствующие теги, возможно, были [тег: tsql] и [tag: dataexplorer]. Но теперь, когда есть ответы mysql и oracle, немного поздно его изменить. –

ответ

13

попробовать:

SELECT 
    ROW_NUMBER() OVER(ORDER BY age) AS RowNumber 
     ,count(*) as usercount 
    from users 
    group by age 
1

Как вы могли бы сделать это зависит от сервера базы данных. В SQL Server, можно использовать row_number():

select row_number() over (order by age) 
,  age 
,  count(*) as usercount 
from users 
group by 
     age 
order by 
     age 

Но часто проще и быстрее использовать клиентские номера стороны строки.

+0

«раздел по возрасту» приведет к тому, что число будет оставаться для каждого «возраста», а запрос будет группироваться по возрасту, поэтому ваш номер строки будет равен 1 для каждой строки. –

+0

@KM: Правильно, отредактировано в ответ – Andomar

1

использование rownumber функция доступна в SQL сервере

SELECT 
    ROW_NUMBER() OVER (ORDER BY columnNAME) AS 'RowNumber',count(*) as usercount 
    FROM users 
+0

спасибо за ссылку – SilentGhost

2

Для MySql:

SELECT @row := @row + 1 as row FROM anytable a, (SELECT @row := 0) r 
1

Если это Oracle, используйте rownum.

SELECT SOMETABLE.*, ROWNUM RN 
FROM SOMETABLE 
WHERE SOMETABLE.SOMECOLUMN = :SOMEVALUE 
ORDER BY SOMETABLE.SOMEOTHERCOLUMN; 

Окончательный ответ будет полностью зависеть от того, какую базу данных вы используете.

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