2016-05-23 9 views
1

2つのテーブルのいずれかで複数の計算フィールドを実行するSELECTクエリを作成しようとしています。私はSQL(私はいくつかの無料のオンラインチュートリアルを見てきましたので、私は一般的なアイデアを見てきました)に慣れていますが、私の目標は私のスキル範囲から少しだと思います。 ID(シリアル)列を持つPostgreSQL:同じクエリの異なる列に列データを再利用する

  • TreeRecordSite(CHR)

    各IDは、個々の木を表す:

    私は2つのテーブルを持っています。カラムID(シリアル)、TreeID(INT)、DBH(INT)

    DBHと

  • TreeHistoryツリー直径です。

現在、私はこれを作成することができます。

| 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; 

これについての助けがあれば幸いです。

は、特定のサイズの条件で

+0

私はあなたの目標が何であるか分かりません。サイトのすべてのツリーをWHICHサイズで探したいですか?平均? – gbalduzzi

答えて

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; 
+0

私はちょうどデータベースについての私の2番目の大学のクラスを終了し、そのケースステートメントを聞いたことがない、それは素晴らしいです! – gbalduzzi

+0

@gbalduzzi PostgreSQL 9.4以降( 'TreeHistory"。 "DBH"> 10)の 'count(" TreeRecord "。*)フィルタです。 – Abelisto

+0

それは完全に機能しました。おかげでvkp – Knightshound

関連する問題