2017-11-29 6 views
0

私は3つのテーブルTableA、TableB、TableCを持っています。それらはすべてidでリンクされています。テーブルAにはlogTimeがあり、テーブルBにはdetectTimeがあり、テーブルCにはemptIdがあります。group by節(postgresql)の2つの条件をサポートする方法

私が望む各empIdの場合 1. detectTimeがテーブルBに見つからない場合のlogTimeの数 2. detectTimeが検出された場合、logTimeとdetectTimeの平均の差。

私はdetectionTimeが見つかりましたが、detectionTimeが、私はエントリを得た。ここ

select det.empid ,average(det.blocked_time) 
FROM (SELECT c.emplid as empid, EXTRACT(EPOCH FROM (a.detectionTime - b.logTime)) as blocked_time 
     ## inner and join condition here 
) As det group by det.emplid where dat.blocked_time>0 

を発見していないときにデータを取得する方法がわからないときの平均を取得するこのクエリを書いたときblocked_time> 0平均およびその他の統計情報。

blocked_timeは何のサンプルデータが共有されていないとして0

+0

サンプルデータと希望する出力を親切に共有してください。 – zarruq

答えて

1

ので、(仮定)オプションがdetectionTimeためNULL値を変換するために、内側のクエリでleft joinと​​3210を使用することができたときに、それぞれEMPIDためblocked_timeの数を取得する方法0に変更し、次に外部クエリで条件付き集計を使用します。

select det.empid , 
     avg(case when detectionTime > 0 then det.blocked_time end) as avgBlockedTime, 
     sum(case when detectionTime = 0 then 0 else 1 end) as logTimeCount 
FROM (SELECT c.emplid as empid, 
     EXTRACT(EPOCH FROM (a.detectionTime - b.logTime)) as blocked_time, 
     coalesce(DetectionTime,0) as detectionTime 
     ## left outer join and condition here 
) As det 
group by det.empid 
+0

この問題を解決するために感謝してくれてありがとう@ザルーク。このケース文を追加してメジアンを計算する方法を知りたい。現在、私は中央値をTO_CHARを使用して呼び出しています(|| '秒')::間隔 'HH24:MI:SS')MedianBlockedTime、 – Alchemist

+0

@Alchemist:親切に別の質問をしてください。誰か助けてくれるでしょう:-) – zarruq

2

まず、いくつかのコメント:

  • あなた。 SQL文が構文的に正しくありません。 はGROUP BYより前に指定する必要があります。

  • クエリは、idが3つのテーブルすべての一意のキーであると考えられます。そうしないと、同じ値が結合結果に複数回現れる可能性があります。

あなたが探している式は、これを試してみてください

count(blocked_time) FILTER (WHERE blocked_time = 0) 
1

です:

select emptid, 
sum(case when detectiontime is null then 1 else 0 end) as count, 
average(case when detectiontime is not null then diff else 0 end) as avg 
(
select a.*,b.detectiontime,c.emptid,a.logtime-b.detectiontime as diff 
from 
tablea a 
left join 
tableb b 
on a.id = b.id 
left join 
tablec c 
on a.id = c.id 
) 
group by emptid; 

は、あなたが何か他のものを探しているなら、私に教えてください。

+0

Thanks G.Arima。私はちょうどメディアンでこのケースの条件を追加することを知りたいです。私が使用しているメディアン関数は、PERCENTILE_CONT(0.5)WITHIN GROUP(det.blocked_timeによる注文)です – Alchemist

関連する問題