Add a "having" clause to the query

        :param column: The column
        :type column: str

        :param operator: The having clause operator
        :type operator: str

        :param value: The having clause value
        :type value: mixed

        :param boolean: Boolean joiner type
        :type boolean: str

        :return: The current QueryBuilder instance
        :rtype: QueryBuilder

def having(self, column, operator=None, value=None, boolean="and"):
        """
        Add a "having" clause to the query

        :param column: The column
        :type column: str

        :param operator: The having clause operator
        :type operator: str

        :param value: The having clause value
        :type value: mixed

        :param boolean: Boolean joiner type
        :type boolean: str

        :return: The current QueryBuilder instance
        :rtype: QueryBuilder
        """
        type = "basic"

        self.havings.append(
            {
                "type": type,
                "column": column,
                "operator": operator,
                "value": value,
                "boolean": boolean,
            }
        )

        if not isinstance(value, QueryExpression):
            self.add_binding(value, "having")

        return self