簡體   English   中英

僅當組中的所有記錄均符合條件時才分組並返回結果

[英]Grouping and returning result only when all records in the group match the criteria

數據庫結構如下:

地址有很多計划計划有很多工作職位有很多UserJobs

我試圖將針對特定地址完成的所有工作歸為一組,而不管計划如何。

從那里,我只想看到尚未完成一項成功工作的地址

成功的工作是當UserJobs.perfomance =准時或UserJobs.perfomance =晚

SELECT
  "addresses"."address1",
  "user_jobs"."performance"

FROM
  "addresses" JOIN "plans" ON "addresses"."id" = "plans"."address_id" 
  JOIN "jobs" ON "plans"."id" = "jobs"."plan_id" 
  JOIN "user_jobs" ON "jobs"."id" = "user_jobs"."job_id"

group by   
  "addresses"."address1",
  "user_jobs"."performance"

我嘗試構建上面的查詢,但是我已經看到了它的缺陷。 它將按地址分組,但如果該地址內有不同的演奏,它將拆分

如果要統計已完成的工作,可以使用條件聚合

SELECT
  "addresses"."address1",
  COUNT(CASE 
           WHEN "user_jobs"."performance" IN ('ontime', 'late') THEN 1
        END) AS cnt  
FROM
  "addresses" JOIN "plans" ON "addresses"."id" = "plans"."address_id" 
  JOIN "jobs" ON "plans"."id" = "jobs"."plan_id" 
  JOIN "user_jobs" ON "jobs"."id" = "user_jobs"."job_id"    
GROUP BY   
  "addresses"."address1

“組中的所有記錄均符合條件”-> bool_and聚合函數

select "addresses"."address1" FROM
    "addresses" JOIN "plans" ON "addresses"."id" = "plans"."address_id" 
    JOIN "jobs" ON "plans"."id" = "jobs"."plan_id" 
    JOIN "user_jobs" ON "jobs"."id" = "user_jobs"."job_id"

   group by   
     "addresses"."address1"
   HAVING bool_and("user_jobs"."performance" IN ('ontime', 'late'))

暫無
暫無

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

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