Пример не неудачный, он просто простой. Вот пример посложнее:
$q2 = $this->modx->newQuery($this->classKey); $offersAlias = "offer"; $q2->setClassAlias($offersAlias); $q2->select(array( "property_198", "GROUP_CONCAT({$offersAlias}.id SEPARATOR '||') as offers_id", "GROUP_CONCAT({$offersAlias}.price SEPARATOR '||') as prices", "GROUP_CONCAT({$offersAlias}.article SEPARATOR '||') as articles", "GROUP_CONCAT({$offersAlias}.packaging SEPARATOR '||') as packages", )); $q2->where(array( "{$offersAlias}.published" => 1, "{$offersAlias}.deleted" => 0, "{$offersAlias}.hidemenu" => 0, "{$offersAlias}.property_198:!=" => "", )); $q2->groupby("{$offersAlias}.property_198"); $q2->prepare(); $sql = $q2->toSQL(); $c->query['from']['joins'][] = array( "type" => "left join", "table" => "({$sql})", "alias" => "t1", "conditions" => array( new xPDOQueryCondition(array( "sql" => "{$alias}.property_198 = t1.property_198", )), ), ); $c->select(array( "if(t1.offers_id IS NOT NULL, t1.offers_id, {$alias}.id) as offers_id", "if(t1.prices IS NOT NULL, t1.prices, {$alias}.price) as prices", "if(t1.articles IS NOT NULL, t1.articles, {$alias}.article) as articles", "if(t1.packages IS NOT NULL, t1.packages, {$alias}.packaging) as packages", ));

SQL:
SELECT if(modResource.remains > 0 , 1, 0) as in_store, if(t1.offers_id IS NOT NULL, t1.offers_id, modResource.id) as offers_id, if(t1.prices IS NOT NULL, t1.prices, modResource.price) as prices, if(t1.articles IS NOT NULL, t1.articles, modResource.article) as articles, if(t1.packages IS NOT NULL, t1.packages, modResource.packaging) as packages, FROM `modx_site_content` AS `modResource` left join ( SELECT `property_198`, GROUP_CONCAT(offer.id SEPARATOR '||') as offers_id, GROUP_CONCAT(offer.price SEPARATOR '||') as prices, GROUP_CONCAT(offer.article SEPARATOR '||') as articles, GROUP_CONCAT(offer.packaging SEPARATOR '||') as packages FROM `modx_site_content` AS `offer` WHERE ( `offer`.`published` = 1 AND `offer`.`deleted` = 0 AND `offer`.`hidemenu` = 0 AND `offer`.`property_198` != '' ) GROUP BY offer.property_198 ) `t1` ON modResource.property_198 = t1.property_198 WHERE ( ( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 ) AND `modResource`.`template` in (3,21) )

Здесь выборка несколько килотоваров с группировкой по полю (тут товары с вариациями товаров). И вот когда у всех товаров были заполнено это дополнительное поле, участвующее в группировке, тогда да, обычным запросом обходился. А теперь появились товары, у которых это поле не было заполнено. Пришлось переписывать запрос, так как если я сейчас сделаю группировку по этому незаполненному полю, у меня будут сотни товаров в одной карточке, а если я исключу такие товары, то они у меня просто не попадут в выборку.