PostgreSQL:在同一查询的不同列中重用列数据

时间:2016-05-23 15:38:54

标签: sql postgresql

我正在尝试创建一个SELECT查询,该查询在两个表中的一个表上执行多个计算字段。我是SQL的新手(我看过几个免费的在线教程,所以我有一个大致的想法),但我认为我的目标有点超出我的技能范围。

我有两张桌子:

    {li>

    TreeRecordID(序列),Site(chr)

    每个ID代表一棵树。

    {li>

    TreeHistoryID(序列),TreeID(int),DBH(int)

    DBH是树木直径。

目前我可以创建:

 |  Site  |  Total tree count of site  |  Avg DBH of site  |

我希望有另一个列可以为每个站点提供特定大小的树的总数。我可以在一个简单的查询中重新创建这个,我对堆栈(SQL Select - Calculated Column if Value Exists in another Table)的研究让我觉得嵌套的SELECT是我所追求的,但我无法让它工作。我目前的代码是:

SELECT 
    "TreeRecord"."Site", 
    count("TreeRecord".*) AS Total_Count, 
    round(avg("TreeHistory"."DBH"), 0) AS Average_DBH
FROM 
    "TreeRecord"
LEFT OUTER JOIN 
    "TreeHistory" ON "TreeRecord"."ID" = "TreeHistory"."TreeID"
GROUP BY 
    "Site"
ORDER BY 
    "Site" ASC;

对此的任何帮助都将非常感激。

谢谢

1 个答案:

答案 0 :(得分:1)

使用具有特定尺寸条件的count

SELECT "TreeRecord"."Site",
count("TreeRecord".*) AS Total_Count, 
round(avg("TreeHistory"."DBH"),0) AS Average_DBH,
count(case when "TreeHistory"."DBH" > 10 then 1 end) as count_over_specific_size          
                                      ^^--change this size accordingly
FROM "TreeRecord"
LEFT OUTER JOIN "TreeHistory"
ON "TreeRecord"."ID" = "TreeHistory"."TreeID"
GROUP BY "Site"
ORDER BY "Site" ASC;