DB结构如下:
地址有很多计划乔布斯有很多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"我试着构建上面的查询,但我已经看到了其中的缺陷。它将按地址分组,但如果在该地址中有不同的性能,它将分裂。
发布于 2016-06-09 05:52:01
如果要计算已完成的成功工作,可以使用条件聚合:
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发布于 2016-06-09 09:22:00
“组中的所有记录都符合标准”,-> 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'))https://stackoverflow.com/questions/37717732
复制相似问题