There are two requests made to the database and glued into one, but I can’t group it so that it does not throw out some of the data.
And get after grouping such a result that were in the column potr and kolob and empty values and filled.
BEGIN /* SELECT DISTINCT reg1,grafik, potr,kolob FROM (*/ SELECT r.id_reg AS idreg,r.regnames AS reg1,r.subord AS subr, r.subordend AS sebr, (SELECT COUNT( * ) FROM kartosn k WHERE k.obdate > 2006-01-01 AND k.subord>=subr AND k.subord<sebr ) AS grafik, r.test AS potr,r.test AS kolob FROM region r WHERE r.id_reg>1 AND r.id_reg<>10 AND r.id_reg<>20 AND r.id_reg<>30 AND r.id_reg<>40 AND r.id_reg<>12 AND r.id_reg<>13 UNION SELECT idreg, reg1, (SELECT r.test FROM region r WHERE r.id_reg=1 ) AS t2, (SELECT r.test FROM region r WHERE r.id_reg=1 ) AS t1, (SELECT COUNT( * ) FROM kartosn k WHERE k.obdate > 2006-01-01 AND k.subord>=subr AND k.subord<sebr ) AS grafik, (SELECT COUNT( idreg )) AS potr, (SELECT (SUM(ografik)+SUM(cgrafik)) FROM region r WHERE idreg=r.id_reg ) AS kolob FROM ( SELECT k.obdate, k.kartel_id as id,r.id_reg AS idreg, r.regnames AS reg1, r.subord AS subr ,r.subordend AS sebr, (SELECT COUNT( * ) AS N FROM objects o WHERE ografik=1 AND o.kartel_id =id) AS ografik, (SELECT COUNT( * ) AS M FROM ctp WHERE `cgrafik` =1 AND kartel_id = id) as cgrafik, (SELECT DATE_FORMAT( o.pasobdate, "%d.%m.%Y" ) FROM ozp o WHERE o.kartel_id = id AND o.pasobdate>"0000-00-00" ) AS pasobdate FROM kartosn k, `region` r, auth a WHERE k.obdate > "2009-01-01" AND k.obdate <date_ob AND( SELECT COUNT(*) FROM ozp o WHERE o.kartel_id = k.kartel_id AND o.pasobdate>"0000-00-00")<>1 AND a.`subord` = k.`subord` AND k.`subord`=r.`subord` GROUP BY id ORDER BY reg1 ) AS ff GROUP BY reg1 /* )AS tyyyyy ORDER BY reg1 */ ; END 
