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.