我有一张供工作和投标的桌子。每项工作都有许多标书。有一个出价列"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作业)
发布于 2013-12-28 18:58:37
这里有一种在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}"发布于 2013-12-29 06:52:26
这应该作为一个纯SQL解决方案使用:
select count(1)
from jobs
where id not in (select distinct job_id from bids where is_selected=true)假设你只想知道没有出价的工作总数。如果需要作业的详细信息,可以替换select子句的内容。
https://stackoverflow.com/questions/20811961
复制相似问题