SQL查询后删除重复列

nod*_*ase 1 sql postgresql join aggregate-functions

我有这个查询,但我得到两列houseid:

我怎么只得到一个?

SELECT vehv2pub.houseid, vehv2pub.vehid, vehv2pub.epatmpg, 
       dayv2pub.houseid, dayv2pub.trpmiles
FROM vehv2pub, dayv2pub
WHERE vehv2pub.vehid >= 1
      AND dayv2pub.trpmiles < 15
      AND dayv2pub.houseid = vehv2pub.houseid;
Run Code Online (Sandbox Code Playgroud)

而且,我如何获得平均值epatmpg?那么查询只会返回值?

Erw*_*ter 6

最优雅的方法是USING在显式连接条件中使用该子句:

SELECT houseid, v.vehid, v.epatmpg, d.houseid, d.trpmiles
FROM   vehv2pub v
JOIN   dayv2pub d USING (houseid)
WHERE  v.vehid >= 1
AND    d.trpmiles < 15;
Run Code Online (Sandbox Code Playgroud)

这样,即使您使用,列houseid也只在结果中一次SELECT *.

每个文件:

USING是一种简写符号:它采用逗号分隔的列名列表,连接表必须具有相同的列名,并形成一个连接条件,指定每对列的相等性.此外,JOIN USING对于每个等同的输入列对,输出有一列,然后是每个表的其余列.

要获取epatmpg所选行的平均值:

SELECT avg(v.epatmpg) AS avg_epatmpg
FROM   vehv2pub v
JOIN   dayv2pub d USING (houseid)
WHERE  v.vehid >= 1
AND    d.trpmiles < 15;
Run Code Online (Sandbox Code Playgroud)

如果有多个匹配项dayv2pub,则派生表可以vehv2pub在连接后保存每行的多个实例.avg()基于派生表.