![](/img/trans.png)
[英]Find all records that match a GROUP BY result HAVING count > 1 in SQLite
[英]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.