Thursday, February 5, 2015

SQL queries

DEFINITION:
  1. User table
  2. Contract table
  3. User can has many Contract 
  4. Contract has rating field
TASK: Sort user by contract rating, as user can has many contracts we will use latest one

QUERY:
 User.joins('LEFT OUTER JOIN (
             SELECT MAX(id) AS id, user_id FROM contracts GROUP BY user_id
           ) contracts ON contracts.user_id = user.id')
     .joins('LEFT OUTER JOIN contracts contract_fields ON contract_fields.id = contracts.id')
     .order('contract_fields.rating DESC NULLS LAST')

EXPLENATION: first join select proper contract for user and second loads propper fields for sort

to be continued..
 
 
Blogger Templates