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

Cách lấy số hàng trong PostgreSQL

PostgreSQL cho phép bạn lấy số hàng cụ thể cho dữ liệu của mình để xếp hạng, báo cáo và phân tích dữ liệu. Đây là cách lấy số hàng trong PostgreSQL. Bạn có thể sử dụng nó để phân tích thêm dựa trên Id hàng trong PostgreSQL.

Cách lấy số hàng trong PostgreSQL

Dưới đây là cách lấy số hàng cụ thể trong PostgreSQL. Chúng ta sẽ xem xét cách lấy số hàng bằng cách sử dụng hàm cửa sổ ROW_NUMBER () có sẵn trong PostgreSQL 8.4+ cũng như sử dụng SQL thuần túy cho PostgreSQL <8.4.

Giả sử bạn có bảng sau doanh số bán hàng (order_date, sale)

postgres=# create table sales(order_date date,sale int);

postgres=# insert into sales values('2020-04-01',210),
           ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230),
           ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25),
           ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250);

postgres=# select * from sales;
 order_date | sale
------------+------
 2020-04-01 |  210
 2020-04-02 |  125
 2020-04-03 |  150
 2020-04-04 |  230
 2020-04-05 |  200
 2020-04-10 |  220
 2020-04-06 |   25
 2020-04-07 |  215
 2020-04-08 |  300
 2020-04-09 |  250

Phần thưởng đọc:Cách tính toán phần trăm trong PostgreSQL

Cách lấy số hàng trong PostgreSQL bằng ROW_NUMBER ()

Kể từ PostgreSQL 8.4, bạn có thể dễ dàng hiển thị số hàng trong PostgreSQL bằng cách sử dụng hàm ROW_NUMBER (). Đây là truy vấn SQL để lấy id hàng trong PostgreSQL.

postgres=# select row_number() over(), *
           from   sales;
 row_number | order_date | sale
------------+------------+------
          1 | 2020-04-01 |  210
          2 | 2020-04-02 |  125
          3 | 2020-04-03 |  150
          4 | 2020-04-04 |  230
          5 | 2020-04-05 |  200
          6 | 2020-04-10 |  220
          7 | 2020-04-06 |   25
          8 | 2020-04-07 |  215
          9 | 2020-04-08 |  300
         10 | 2020-04-09 |  250

Trong truy vấn SQL ở trên, chúng tôi sử dụng hàm cửa sổ row_number () để tạo số hàng cho mỗi hàng. Chúng tôi cũng sử dụng over () để yêu cầu PostgreSQL hiển thị số hàng cho tất cả các hàng mà không cần bất kỳ thứ tự nào.

Phần thưởng đã đọc:Cách tính giá trị trung bình trong PostgreSQL

Nếu bạn muốn sắp xếp thứ tự các hàng trước khi tạo số hàng, bạn có thể thêm mệnh đề ORDER BY trong OVER (), như được hiển thị bên dưới

postgres=# select row_number() over(order by sale), *
           from   sales;
 row_number | order_date | sale
------------+------------+------
          1 | 2020-04-06 |   25
          2 | 2020-04-02 |  125
          3 | 2020-04-03 |  150
          4 | 2020-04-05 |  200
          5 | 2020-04-01 |  210
          6 | 2020-04-07 |  215
          7 | 2020-04-10 |  220
          8 | 2020-04-04 |  230
          9 | 2020-04-09 |  250
         10 | 2020-04-08 |  300

Bạn không thể sử dụng mệnh đề WHERE trong các hàm cửa sổ ROW_NUMBER hoặc OVER (). Vì vậy, nếu bạn muốn lọc dữ liệu trước khi tạo số hàng, bạn cần sử dụng nguyên nhân WHERE trong một truy vấn con, như được hiển thị bên dưới

postgres=# select row_number() over(order by sale), *
           from  ( select * from sales where sale>100) filtered_sales;
 row_number | order_date | sale
------------+------------+------
          1 | 2020-04-02 |  125
          2 | 2020-04-03 |  150
          3 | 2020-04-05 |  200
          4 | 2020-04-01 |  210
          5 | 2020-04-07 |  215
          6 | 2020-04-10 |  220
          7 | 2020-04-04 |  230
          8 | 2020-04-09 |  250
          9 | 2020-04-08 |  300

Bạn cũng có thể lấy số hàng trong PostgreSQL bằng cách sử dụng create_series. Tuy nhiên, không nên tạo id hàng bằng create_series vì nó không thể mở rộng.

Phần thưởng đã đọc:Cách điền ngày còn thiếu trong PostgreSQL bằng cách sử dụng create_series

Cách lấy số hàng trong PostgreSQL (<8,4) mà không có ROW_NUMBER ()

Nếu bạn sử dụng PostgreSQL <8.4, thì row_number () chức năng cửa sổ có thể không có sẵn trong đó. Trong trường hợp đó, bạn phải lấy số hàng trong PostgreSQL với sự trợ giúp của tự tham gia. Đây là truy vấn cho nó.

postgres=# SELECT    count(*) rownum, foo.*
           FROM      sales foo
           JOIN      sales bar
              ON (foo.order_date <= bar.order_date)
           GROUP BY  foo.order_date, foo.sale
           ORDER BY  rownum
           ;
 rownum | order_date | sale
--------+------------+------
      1 | 2020-04-10 |  220
      2 | 2020-04-09 |  250
      3 | 2020-04-08 |  300
      4 | 2020-04-07 |  215
      5 | 2020-04-06 |   25
      6 | 2020-04-05 |  200
      7 | 2020-04-04 |  230
      8 | 2020-04-03 |  150
      9 | 2020-04-02 |  125
     10 | 2020-04-01 |  210

Sau khi bạn nhận được số hàng trong PostgreSQL, bạn có thể sử dụng công cụ báo cáo PostgreSQL để báo cáo dữ liệu của mình trong một bảng như được hiển thị bên dưới và chia sẻ với nhóm của bạn.

Nếu bạn muốn tạo biểu đồ, trang tổng quan và báo cáo từ cơ sở dữ liệu PostgreSQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL qua DBeaver

  2. Cách kiểm tra phiên bản PostgreSQL

  3. Hội nghị mùa xuân FLOSS Vương quốc Anh

  4. Cách Extract () hoạt động trong PostgreSQL

  5. Điều gì xảy ra với các bản sao khi chèn nhiều hàng?