我有工作和出价的表格。每项工作都有很多出价。有一个投标列“is_selected”是一个布尔值。对于一项工作,只有一个出价可以是is_selected = true。
我的问题是,我想要返回所有出价is_selected = false的作业数量。
例如,
Job 1 has bids a=true, b=false, c=false, d=false
Job 2 has bids a=false, b=false, c=false
Job 3 has bids a=false, b=false
Job 4 has no bids
此查询的结果应该返回一个包含3个作业的查询(只有作业1选择了一个投标人;因此它应该返回作业2,3,4)。
如何在postgresql或ActiveRecord / Rails中完成?
使用数据结构更新:
3桌
活动(has_many工作)
工作(has_many出价,belongs_to事件)
出价(belongs_to job)
job_id(整数)
is_selected(布尔)
答案 0 :(得分:1)
这是在ruby中执行此操作的一种方法 - 不像在数据库中那样有效
all_jobs = Job.includes(:bids)
logger.debug "ALL JOBS: #{all_jobs.length}"
jobs = all_jobs.reject { |job| job.bids.detect(&:is_selected) }
logger.debug "UNSELECTED JOBS #{jobs.length}"
答案 1 :(得分:1)
这应该作为纯SQL解决方案:
select count(1)
from jobs
where id not in (select distinct job_id from bids where is_selected=true)
假设您只想知道没有出价的工作总数。如果需要作业的详细信息,可以替换select子句的内容。