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

Cách tạo Pivot Table trong PostgreSQL

Bảng tổng hợp là một cách hữu ích để phân tích số lượng lớn dữ liệu bằng cách sắp xếp nó thành một định dạng dễ quản lý hơn. Dưới đây là cách tạo bảng tổng hợp trong PostgreSQL. Nói cách khác, chúng tôi sẽ tạo bảng chéo trong PostgreSQL.

Cách tạo Pivot Table trong PostgreSQL

Có ít nhất một vài cách để tạo bảng tổng hợp trong PostgreSQL. Một là nơi chúng tôi xoay các hàng thành các cột trong PostgreSQL bằng cách sử dụng câu lệnh CASE, và một là ví dụ đơn giản về chức năng bảng chéo PostgreSQL.

Giả sử bạn có bảng sau

CREATE TABLE Meeting
(
    ID INT,
    Meeting_id INT,
    field_key VARCHAR(100),
    field_value VARCHAR(100)
);

INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (1, 1,'first_name' , 'Alec');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (2, 1,'last_name' , 'Jones');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (3, 1,'occupation' , 'engineer');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (4,2,'first_name' , 'John');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (5,2,'last_name' , 'Doe');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (6,2,'occupation' , 'engineer');

+------+------------+------------+-------------+
| ID   | Meeting_id | field_key  | field_value |
+------+------------+------------+-------------+
|    1 |          1 | first_name | Alec        |
|    2 |          1 | last_name  | Jones       |
|    3 |          1 | occupation | engineer    |
|    4 |          2 | first_name | John        |
|    5 |          2 | last_name  | Doe         |
|    6 |          2 | occupation | engineer    |
+------+------------+------------+-------------+

Giả sử bạn muốn tạo bảng tổng hợp trong PostgreSQL, sao cho một cột mới được tạo cho mỗi giá trị duy nhất trong field_key , đó là (first_name, last_name, nghề nghiệp) như hình dưới đây

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Tạo Pivot Table trong PostgreSQL bằng câu lệnh CASE

Bạn có thể dễ dàng chuyển các hàng thành các cột trong bảng trên bằng cách sử dụng câu lệnh CASE,

postgresql> select meeting_Id,
         max(case when (field_key='first_name') then field_value else NULL end) as first_name,
         max(case when (field_key='last_name') then field_value else NULL end) as last_name,
         max(case when (field_key='occupation') then field_value else NULL end) as occupation
         from meeting
         group by meeting_Id
         order by meeting_Id;
+------------+------------+-----------+------------+
| meeting_Id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Trong câu lệnh trên, field_key của mỗi hàng giá trị được kiểm tra và theo đó các cột được điền. Ví dụ:if field_key giá trị là ‘first_name’ rồi đến first_name cột được điền, v.v.

Khi bạn tạo bảng tổng hợp trong PostgreSQL, bạn có thể sử dụng công cụ báo cáo để vẽ biểu đồ trong bảng. Dưới đây là một ví dụ về bảng tổng hợp được tạo bằng Ubiq. Bạn có biết rằng Ubiq cho phép bạn tạo bảng tổng hợp mà không cần viết bất kỳ SQL nào không?

Phần thưởng đã đọc:Cách Tính Tổng số Chạy trong Redshift

Tạo Pivot Table trong PostgreSQL bằng hàm Crosstab

PostgreSQL cũng cung cấp một hàm Crosstab tích hợp cho phép bạn dễ dàng tạo bảng tổng hợp trong PostgreSQL. Tuy nhiên, bạn cần cài đặt table_func tiện ích mở rộng để kích hoạt chức năng Crosstab.

postgresql> CREATE EXTENSION IF NOT EXISTS tablefunc;

Giả sử bạn có bảng sau.

CREATE TABLE exams (
id int(11) NOT NULL auto_increment,
name varchar(15),
exam int,
score int,
PRIMARY KEY (id)
);

insert into exams (name,exam,score) values ('Bob',1,70);
insert into exams (name,exam,score) values ('Bob',2,77);
insert into exams (name,exam,score) values ('Bob',3,71);
insert into exams (name,exam,score) values ('Bob',4,70);

insert into exams (name,exam,score) values ('Sue',1,89);
insert into exams (name,exam,score) values ('Sue',2,87);
insert into exams (name,exam,score) values ('Sue',3,88);
insert into exams (name,exam,score) values ('Sue',4,89);

mysql> select * from exams;
+------+------+------+-------+
| id   | name | exam | score |
+------+------+------+-------+
|   1  |  Bob |   1  |   70  |
|   2  |  Bob |   2  |   77  |
|   3  |  Bob |   3  |   71  |
|   4  |  Bob |   4  |   70  |
|   5  |  Sue |   1  |   89  |
|   6  |  Sue |   2  |   87  |
|   7  |  Sue |   3  |   88  |
|   8  |  Sue |   4  |   89  |
+------+------+------+-------+

Giả sử bạn muốn xoay vòng bảng trên bằng Bài kiểm tra , sao cho mỗi học sinh, bạn nhận được 1 hàng, với tất cả điểm thi là các cột riêng biệt, như được hiển thị bên dưới.

 name | exam1 | exam2 | exam3 | exam4
------+-------+-------+-------+-------
 Bob  |    70 |    77 |    71 |    70
 Sue  |    89 |    87 |    88 |    89

Vì chúng tôi đã bật chức năng Bảng chéo cho cơ sở dữ liệu của mình, bạn có thể sử dụng truy vấn sau để tạo bảng chéo trong PostgreSQL.

postgres=# SELECT * FROM crosstab('select name, exam, score from exams order by 1,2')
             AS ct (name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int);
 name | exam1 | exam2 | exam3 | exam4
------+-------+-------+-------+-------
 Bob  |    70 |    77 |    71 |    70
 Sue  |    89 |    87 |    88 |    89

Crosstab hoạt động với truy vấn SELECT làm tham số đầu vào của nó phải tuân theo 3 yêu cầu

  • Nó phải trả về 3 cột
  • Cột đầu tiên là số nhận dạng hàng cho bảng tổng hợp cuối cùng của bạn, ví dụ:tên
  • Cột thứ 2 là cột danh mục được xoay vòng, ví dụ:kỳ thi
  • Cột thứ 3 là cột giá trị mà bạn muốn xoay vòng, ví dụ:điểm số

Crosstab sẽ lấy kết quả của truy vấn CHỌN của bạn và xây dựng bảng tổng hợp từ nó, dựa trên các cột bạn đề cập cho bảng tổng hợp của mình. Trong truy vấn trên, bảng tổng hợp được lưu trữ trong một bảng tạm thời ct (tên varchar (15), exam1 int, exam2 int, exam3 int, exam4 int). Bạn phải xác định tên cột và kiểu dữ liệu của bảng tổng hợp cuối cùng của mình.

Phần thưởng đã đọc:Cách Tính Trung bình Động trong Redshift

Theo ý kiến ​​của chúng tôi, nếu bạn muốn tạo bảng tổng hợp trong PostgreSQL, chúng tôi nhận thấy phương pháp Crosstab khó hơn so với sử dụng câu lệnh CASE, chủ yếu là do Crosstab gây ra lỗi nếu bạn không xác định chính xác kiểu dữ liệu cột của bảng tổng hợp cuối cùng.

Tuy nhiên, bây giờ bạn đã biết hai cách để tạo bảng tổng hợp trong PostgreSQL. Bạn có thể tùy chỉnh chúng theo yêu cầu của mình.

Bạn có biết rằng bạn có thể tạo bảng tổng hợp trong Ubiq chỉ bằng cách kéo và thả không?

Nhân tiện, nếu bạn muốn tạo bảng tổng hợp, biểu đồ &trang tổng quan 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. Chọn ba giá trị hàng đầu trong mỗi nhóm

  2. Nhận thế kỷ từ một ngày trong PostgreSQL

  3. Cấp quyền cho người dùng đối với bất kỳ bảng mới nào được tạo trong postgresql

  4. Trình điều khiển HikariCP Postgresql Tuyên bố không chấp nhận URL JDBC

  5. Các tính năng PostgreSQL Enterprise mới và đang phát triển với các bản phát hành gần đây