Postgresql查询返回列的所有值都为false的位置

时间:2013-12-28 07:00:03

标签: ruby-on-rails postgresql

我有工作和出价的表格。每项工作都有很多出价。有一个投标列“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事件)

  • event_id(整数)

出价(belongs_to job)

  • job_id(整数)

  • is_selected(布尔)

2 个答案:

答案 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子句的内容。