Tôi đang cố gắng tạo chế độ xem dạng bảng tổng hợp trong postgresql và gần như ở đó! Dưới đây là các truy vấn cơ bản:cách chính xác để tạo bảng tổng hợp trong postgresql bằng cách sử dụng CASE WHEN
select
acc2tax_node.acc, tax_node.name, tax_node.rank
from
tax_node, acc2tax_node
where
tax_node.taxid=acc2tax_node.taxid and acc2tax_node.acc='AJ012531';
Và dữ liệu:
acc | name | rank
----------+-------------------------+--------------
AJ012531 | Paromalostomum fusculum | species
AJ012531 | Paromalostomum | genus
AJ012531 | Macrostomidae | family
AJ012531 | Macrostomida | order
AJ012531 | Macrostomorpha | no rank
AJ012531 | Turbellaria | class
AJ012531 | Platyhelminthes | phylum
AJ012531 | Acoelomata | no rank
AJ012531 | Bilateria | no rank
AJ012531 | Eumetazoa | no rank
AJ012531 | Metazoa | kingdom
AJ012531 | Fungi/Metazoa group | no rank
AJ012531 | Eukaryota | superkingdom
AJ012531 | cellular organisms | no rank
Những gì tôi đang cố gắng để có được như sau:
acc | species | phylum
AJ012531 | Paromalostomum fusculum | Platyhelminthes
Tôi cố gắng để làm điều này với CASE KHI , vì vậy tôi đã có được như sau như sau:
select
acc2tax_node.acc,
CASE tax_node.rank WHEN 'species' THEN tax_node.name ELSE NULL END as species,
CASE tax_node.rank WHEN 'phylum' THEN tax_node.name ELSE NULL END as phylum
from
tax_node, acc2tax_node
where
tax_node.taxid=acc2tax_node.taxid and acc2tax_node.acc='AJ012531';
nào mang lại cho tôi kết quả:
acc | species | phylum
----------+-------------------------+-----------------
AJ012531 | Paromalostomum fusculum |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | | Platyhelminthes
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
AJ012531 | |
Bây giờ tôi biết rằng tôi phải nhóm bằng acc tại một số điểm, vì vậy tôi cố gắng
select
acc2tax_node.acc,
CASE tax_node.rank WHEN 'species' THEN tax_node.name ELSE NULL END as sp,
CASE tax_node.rank WHEN 'phylum' THEN tax_node.name ELSE NULL END as ph
from
tax_node, acc2tax_node
where
tax_node.taxid=acc2tax_node.taxid and acc2tax_node.acc='AJ012531'
group by acc2tax_node.acc;
Nhưng tôi nhận được sợ hãi
ERROR: column "tax_node.rank" must appear in the GROUP BY clause or be used in an aggregate function
Tất cả các ví dụ trước tôi đã có thể tìm thấy sử dụng một cái gì đó giống như SUM() xung quanh các câu lệnh CASE, vì vậy tôi đoán đó là hàm tổng hợp. Tôi đã cố gắng sử dụng FIRST():
select
acc2tax_node.acc,
FIRST(CASE tax_node.rank WHEN 'species' THEN tax_node.name ELSE NULL END) as sp,
FIRST(CASE tax_node.rank WHEN 'phylum' THEN tax_node.name ELSE NULL END) as ph
from tax_node, acc2tax_node where tax_node.taxid=acc2tax_node.taxid and acc2tax_node.acc='AJ012531' group by acc2tax_node.acc;
nhưng nhận được lỗi:
ERROR: function first(character varying) does not exist
bất cứ ai có thể đưa ra bất kỳ gợi ý?
Ông có thể xin vui lòng gửi kết quả của truy vấn này: ' CHỌN * TỪ acc2tax_node WHERE acc = 'AJ012531''? – Quassnoi