As others have said, your schema is the problem as you have a many to many relationship (many products may have many options) which makes queries more difficult.
Here is a query that gives you the exact output you asked for. It shows each option, how many unique products that option is assigned to (the COUNT(distinct product_id)) and provides a comma separated list of the product_id values that are assigned.
SELECT pvo.option,
count(distinct product_id),
group_concat(distinct product_id) products
FROM (`products`)
JOIN `product_variant_combinations` pvc using(`product_id`)
JOIN `product_variants` pv using(`combination_id`)
JOIN `product_variant_ao_relation` pv_ao using(`ao_id`)
JOIN `product_variant_options` pvo using(`option_id`)
JOIN `product_variant_attributes` pva using(`attribute_id`)
group by pvo.option;
This is the output for red:
red 3 111026,111025,111024
See here: http://sqlfiddle.com/#!2/68470/133
You asked how to add attribute:
SELECT pva.attribute, pvo.option, count(distinct product_id), group_concat(product_id)
FROM (`products`)
JOIN `product_variant_combinations` pvc using(`product_id`)
JOIN `product_variants` pv using(`combination_id`)
JOIN `product_variant_ao_relation` pv_ao using(`ao_id`)
JOIN `product_variant_options` pvo using(`option_id`)
JOIN `product_variant_attributes` pva using(`attribute_id`)
group by pva.attribute, option
You must GROUP BY each non-aggregate expression in the SELECT clause. In this case the two aggregate expressions are COUNT and GROUP_CONCAT, thus, you must GROUP BY pva.attribute, pvo.option
You probably want to find a good SQL tutorial on GROUP BY.