эй, я думаю, мне стало интересно, что может подумать один из вас, более опытных людей:
FantasyStart.where(week: 13, year: 2019).where.not(position: 'BN').where(player_id: FantasyStart.select(:player_id).where.not(position: 'BN').group(:player_id).having('count(*) = 1').pluck(:player_id))
это генерирует:
(8.4ms) SELECT "fantasy_starts"."player_id" FROM "fantasy_starts" WHERE "fantasy_starts"."position" != $1 GROUP BY "fantasy_starts"."player_id" HAVING (count(*) = 1) [["position", "BN"]]
FantasyStart Load (2.4ms) SELECT "fantasy_starts".* FROM "fantasy_starts" WHERE "fantasy_starts"."week" = $1 AND "fantasy_starts"."year" = $2 AND "fantasy_starts"."position" != $3 AND "fantasy_starts"."player_id" IN ($4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $80, $81, $82, $83, $84, $85, $86, $87, $88, $89, $90, $91, $92, $93, $94, $95, $96, $97, $98, $99, $100, $101, $102, $103, $104, $105, $106, $107, $108, $109, $110, $111, $112, $113, $114, $115, $116, $117, $118, $119) LIMIT $120
это все еще два запроса, так что я знаю это могло быть лучше ...