簡體   English   中英

選擇子查詢中的計數功能

[英]Count function in select subquery

我正在嘗試解決以下查詢,但無法使其完全正常工作,因此確實需要一些幫助。 我想要得到的結果如下:

起作用的部分

  • 作為外鍵存儲在hrs_hours表中的人員編號
  • 全名存儲在prs_personel表中
  • hrs_hours表中所有正常小時的總和,以秒為單位
  • hrs_hours表中所有秒(特殊)小時的總和,以秒為單位

無效的部分

  • hrs_taskname ='Partus Assistentie'的任務計數,該任務計數由工作人員在特定年份的整個月中的周末執行。
  • hrs_taskname ='Partus Assistentie'的任務計數,由工作人員在工作日中於特定年份的整個月中的一個工作日執行。

查詢結果:

沒有放置圖像的權利,因此希望以這種方式獲得清晰的結果。

  • hrs_prs_fkey(整數):6,11
  • prs_fullname(文本):名稱1,名稱2
  • normal_time(double precision):46800,461340
  • ort_time(雙精度):29700、116100
  • partusass_weekend:0,0
  • partusass_week:2,2

在結果中,您可以看到partusass_week是一年中該任務的總金額。 但是,他們兩個都執行了總共2個任務中的1個,因此我希望他們顯示1和1而不是2和2。我應該如何表達我的(select count ... etc ...)子查詢為了得到我想要的結果?

SELECT hrs_prs_fkey, 
prs_fullname, 
SUM(EXTRACT (epoch FROM hrs_normaltime)) AS normal_time, 
SUM(EXTRACT (epoch FROM hrs_orttime)) AS ort_time, 

(SELECT Count(hrs_taskname) AS partusass_weekend FROM hrs_hours 
WHERE hrs_taskname = 'Partus Assistentie'
AND EXTRACT(MONTH FROM "hrs_date") = 7 
AND EXTRACT(YEAR FROM "hrs_date") = 2015
AND extract(dow from hrs_date) in (0,6)), 

(SELECT Count(hrs_taskname) AS partusass_week FROM hrs_hours 
WHERE hrs_taskname = 'Partus Assistentie' 
AND EXTRACT(MONTH FROM "hrs_date") = 7 
AND EXTRACT(YEAR FROM "hrs_date") = 2015
AND extract(dow from hrs_date) in (1,2,3,4,5))

FROM hrs_hours 
LEFT JOIN prs_personel ON hrs_hours.hrs_prs_fkey = prs_personel.prs_pkey 
WHERE EXTRACT(MONTH FROM "hrs_date") = 7 
AND EXTRACT(YEAR FROM "hrs_date") = 2015 
GROUP BY hrs_prs_fkey, prs_fullname 
ORDER BY hrs_prs_fkey ASC

預先感謝您的閱讀和思考。

我認為您只需要條件聚合:

SELECT hrs_prs_fkey, prs_fullname, 
       SUM(EXTRACT(epoch FROM hrs_normaltime)) AS normal_time, 
       SUM(EXTRACT(epoch FROM hrs_orttime)) AS ort_time, 
       SUM(CASE WHEN hrs_taskname = 'Partus Assistentie' AND
                     extract(dow from hrs_date) in (0, 6)
                 THEN 1 ELSE 0 END
           END),
       SUM(CASE WHEN hrs_taskname = 'Partus Assistentie' AND
                     extract(dow from hrs_date) in (1, 2, 3, 4, 5)
                 THEN 1 ELSE 0 END
           END)
FROM hrs_hours LEFT JOIN
     prs_personel
     ON hrs_hours.hrs_prs_fkey = prs_personel.prs_pkey 
WHERE EXTRACT(MONTH FROM hrs_date) = 7 AND
      EXTRACT(YEAR FROM hrs_date) = 2015 AND
GROUP BY hrs_prs_fkey, prs_fullname 
ORDER BY hrs_prs_fkey ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM