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.