Для подзапросов вы можете использовать этот пример в качестве основы:
...
$subselect = $this->select()->setIntegrityCheck(false);
$subselect->from(array('e'=>'feed_entries'),array('e.id'))
->join(array('f'=>'feeds'),'e.feed_id =f.id','')
->join(array('ec'=>'entries_categorias'),'ec.entry_id =e.id','')
->join(array('c'=>'categorias'),'ec.categoria_id =c.id','')
->where('e.imagem332x332 =?',1)
->where('e.deleted =?',0)
->group('e.id')
->where('c.nome IN(?)',$categories)
->having('COUNT(DISTINCT ec.id) =?',count($categories));
$select = $this->select()->where('id IN ?',$subselect)->order('date DESC')->limit(4);
return $this->fetchAll($select);
...
Для group_concat я никогда не пробовал, но на этой странице есть несколько примеров в комментариях
Также взгляните на выражения Zend Db.