select t1.id, t1.name,
case when repcount.rcount is null then 0 else repcount.rcount end as rcnt
FROM `parts` as t1
LEFT JOIN (SELECT count(*) as rcount, r.`part` as rpart
FROM `results` as r
GROUP BY r.`part`) as repcount on repcount.rpart=`part`.id
WHERE условия для t1
записей, разумеется, очень много. поэтому LEFT JOIN в купе с вложенным GROUP BY работает чрезвычайно медленно.
select t1.id, t1.name,SUM(CASE WHEN r.part is null then 0 else 1 end) as rcnt
FROM `parts` as t1 LEFT JOIN `results` as r ON r.part=t1.id
GROUP by t1.id, t1.name
WHERE условия для t1
add
если в мускуле count может null проигнорировать, то вместо sum его засунуть:
COUNT(r.part)
проверил. count действительно игнорирует null записи (я о таком поведении вообще не знал )
впрочем, в данном случае на скорость выполнения не влияет, одинаково с SUM( case when … is null)