I personally find CTEs much easier to read than subqueries.
and you can use them in multiple places. I'm not sure if you have the same subquery twice if the query optimizer uses a single dataset.
Be careful though, above poster mentions that a chain of CTE is almost certain to lead to sequential scans rather than parallelized (optimized) execution.