同时在多列上选择不同的列,并在 PostgreSQL 中保留一列

nit*_*jee 7 sql postgresql

对于这样的表:

tblA  

A,B,C  
1,2,t3a  
1,3,d4g  
1,2,b5e  
1,3,s6u 
Run Code Online (Sandbox Code Playgroud)

我想生成一个表,它同时在 A 和 B 上选择不同的值,并且仍然保留 C 的一个值,如下所示:

tblB  

A,B,C  
1,2,t3a  
1,3,d4g 
Run Code Online (Sandbox Code Playgroud)

看起来这很简单,但我一生都找不到它。

DROP TABLE IF EXISTS tblA CASCADE;  
SELECT DISTINCT ON (A,B), C  
INTO tblB  
FROM tblA;  
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 7

当你使用时DISTINCT ON你应该有ORDER BY

SELECT DISTINCT ON (A,B), C
INTO tblB
FROM tblA
ORDER BY A, B;
Run Code Online (Sandbox Code Playgroud)


Clé*_*ost 4

这应该可以解决问题

CREATE TABLE tblB AS (
    SELECT A, B, max(C) AS max_of_C FROM tblA GROUP BY A, B
)
Run Code Online (Sandbox Code Playgroud)