def as_sql(self, *args, **kwargs):
        """
        Overrides the :class:`SQLAggregateCompiler` method in order to
        prepend the necessary CTE syntax, as well as perform pre- and post-
        processing, including adding the extra CTE table and WHERE clauses.

        :param qn:
        :type qn:
        :return:
        :rtype:
        """

        def _as_sql():
            return super(CTEAggregateQueryCompiler, self).as_sql(*args, **kwargs)

        return CTECompiler.generate_sql(self.connection, self.query, _as_sql)