Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách đánh số hàng trong SQL

Vấn đề:

Bạn muốn cung cấp cho mỗi hàng trong bảng kết quả một số riêng biệt.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên furniture với dữ liệu trong các cột sau:code (khóa chính) và name .

tên
101 giường
202 ghế sofa
333 ghế
123 tủ sách
235 bảng
766 bàn

furniture bảng lưu trữ tên của các món đồ nội thất mà chúng tôi muốn đánh số.

Giải pháp:

 SELECT ROW_NUMBER () OVER () AS num_row, code, nameFROM nội thất; 

Truy vấn trả về số hàng của mỗi món đồ nội thất cùng với tên và mã của nó:

num_row tên
1 giường 101
2 ghế sofa 202
3 ghế 333
4 tủ sách 123
5 bảng 235
6 bàn 766

Lưu ý rằng tên của các món đồ nội thất không được sắp xếp.

Thảo luận:

Nếu bạn muốn đánh số từng hàng trong một tập hợp kết quả, SQL cung cấp ROW_NUMBER() hàm số. Hàm này được sử dụng trong SELECT mệnh đề với các cột khác. Sau ROW_NUMBER() , chúng tôi gọi là OVER() hàm số. Nếu bạn chuyển bất kỳ đối số nào vào OVER , việc đánh số hàng sẽ không được sắp xếp theo bất kỳ cột nào. Do đó, thứ tự của các hàng được hiển thị sẽ không xác định; trong hầu hết các trường hợp, đó là thứ tự mà các bản ghi được chèn vào bảng. Việc đánh số các hàng bắt đầu từ 1. Trong ví dụ của chúng tôi, mỗi bản ghi có một số từ 1 đến 6.

Chúng tôi cũng có thể chỉ định số hàng bằng cách sử dụng một cột. Trong ví dụ dưới đây, chúng tôi đánh số các bản ghi được sắp xếp theo tên. Chúng tôi thực hiện việc này bằng cách chuyển đối số đó đến OVER cùng với ORDER BY (nó sắp xếp các bản ghi theo cột tên):

 CHỌN ROW_NUMBER () HẾT (ĐẶT HÀNG THEO tên) NHƯ num_row, name, codeFROM nội thất; 

Khi bạn nhìn vào tập hợp kết quả, bạn sẽ thấy các hàng được sắp xếp với số của chúng:

hàng tên
1 giường 101
2 tủ sách 123
3 ghế 333
4 bàn 766
5 ghế sofa 202
6 bảng 235

Số được cung cấp bởi ROW_NUMBER() không phụ thuộc vào thứ tự của các hàng trong bảng kết quả. Trong ví dụ bên dưới, chúng tôi đánh số bản ghi bằng cách sử dụng tên cột đã sắp xếp (OVER(ORDER BY name) ), nhưng chúng tôi hiển thị các bản ghi trong tập hợp kết quả theo một cột khác (trong ví dụ của chúng tôi, ORDER BY code ).

 SELECT ROW_NUMBER () OVER (ORDER BY name) AS num_row, name, codeFROM nội thấtORDER BY code; 

Truy vấn trả về số mỗi hàng, nhưng những số này không theo thứ tự tăng dần, vì các bản ghi được sắp xếp theo mã cột:

hàng tên
1 giường 101
2 tủ sách 123
5 ghế sofa 202
6 bảng 235
3 ghế 333
4 bàn 766

Thứ tự mặc định của các hàng được sắp xếp tăng dần, nhưng bạn cũng có thể sắp xếp theo thứ tự giảm dần bằng cách sử dụng DESC từ khóa sau tên của cột mà bạn muốn sắp xếp:

 CHỌN ROW_NUMBER () HẾT (ĐẶT HÀNG THEO tên ASC) NHƯ số_mục, tên, mã_mục_lực 

Truy vấn ở trên trả về tập kết quả:

hàng tên
4 bàn 766
3 ghế 333
6 bảng 235
5 ghế sofa 202
2 tủ sách 123
1 giường 101

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề ORDER BY trong SQL dành cho người mới bắt đầu

  2. Mô hình dữ liệu tổ chức đám cưới

  3. SQL AVG () cho người mới bắt đầu

  4. FieldShield SDK

  5. Kết nối AnySQL Maestro với Salesforce.com