Dynamic ordering of views based on argument
I ended up using this code to get the desired functionality:

function mymodule_views_query_alter(&amp;$view, &amp;$query) {
  // in my case I'm pulling info from the user object to decide the sort,
  // but obviously you could check anything here. Use arg($x) to read URL arguments.
  global $user;
  if ($user-&gt;country == 'AU') {
    // Note in this case NULL is above AU, so descending order it is.
    $query-&gt;orderby = array_merge(array('location_country DESC'), $query-&gt;orderby);
  }
}


I'd love to hear any other thoughts on good ways to do this, particuarly some guidance with adding sort objects to the view using hook_views_pre_execute or similar.