- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 
                        // выбираем случайные категории
        $sql="
              SELECT `id`
              FROM `category`
              WHERE id>=(SELECT ROUND(RAND()*(SELECT COUNT(*) FROM `stat`)))
              limit ".$this->limit;
        $arr=Yii::app()->db->createCommand($sql)->query();
        // в nn будем хранить строку вида a,b,...,e где abc -цифры
        // позже мы скормим это в условие для sql запроса, это самый простой способ
        $nn='';
        foreach ($arr as $val){
            $nn.=$val['id'].',';
        }
        //добавим в конце строки "end", чтобы избавиться от лишней запятой
        $nn.='END';
        // выбираем пользователей из случайных категории, сгенерированных ранее
        $sql="
              SELECT name, category_id, COUNT(category_id) AS total
                FROM `stat`
                    JOIN `category` as C
                    WHERE C.id=category_id AND C.id in (".str_replace(',END','',$nn).")
                GROUP BY category_id
                limit ".$this->limit;
        $arr=Yii::app()->db->createCommand($sql)->query();
                                 
        
            Сказочный говнокод. Сохранены авторские комментарии.
        
        
...
str_replace(',END','',$nn)
А ещё можно вместо END использовать SMURF или кличку домашнего питомца.
Индусы такие индусы :)