2010-06-15 10 views
16

Tôi đã tự hỏi liệu nó có thể liệt kê các hàng được trả về hay không. Không theo bất kỳ nội dung cột nào mà chỉ sinh ra một chỉ số nguyên tuần tự. Ví dụ.Cách liệt kê các hàng được trả về trong SQL?

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

sẽ quay trở lại một cái gì đó dọc theo dòng:

1 12 
2 78 
3  4 
4 42 

nó là dành cho https://data.stackexchange.com/

+2

Bạn đang sử dụng DBMS nào? – BenV

+0

@benv: nó dành cho http://odata.stackexchange.com/ – SilentGhost

+0

@SilentGhost thì các thẻ có liên quan có thể là [tag: tsql] và [tag: dataexplorer]. Nhưng bây giờ có câu trả lời mysql và oracle, hơi muộn để thay đổi nó. –

Trả lời

13

thử:

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

Làm thế nào bạn muốn làm điều đó phụ thuộc vào máy chủ cơ sở dữ liệu của bạn. Trong SQL Server, bạn có thể sử dụng row_number():

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

Nhưng việc sử dụng số hàng phía khách hàng thường dễ dàng hơn và nhanh hơn.

+0

'phân vùng theo tuổi' sẽ làm cho số còn lại cho mỗi' tuổi' và truy vấn được nhóm theo độ tuổi, do đó số hàng của bạn sẽ là 1 cho mỗi hàng. –

+0

@KM: Đúng, được chỉnh sửa trong câu trả lời – Andomar

1

sử dụng rownumber chức năng có sẵn trong SQL Server

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

cảm ơn vì liên kết – SilentGhost

2

Đối với MySql:

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

Nếu đó là Oracle, sử dụng rownum.

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

Câu trả lời cuối cùng sẽ hoàn toàn phụ thuộc vào cơ sở dữ liệu bạn đang sử dụng.