예제 #1
0
    def test_multiple_partitions(self):
        expr = an.Rank() \
            .orderby(self.table_abc.date) \
            .over(self.table_abc.foo, self.table_abc.bar)

        q = Query.from_(self.table_abc).select(expr)

        self.assertEqual(
            'SELECT '
            'RANK() '
            'OVER(PARTITION BY "foo","bar" ORDER BY "date") '
            'FROM "abc"', str(q))
예제 #2
0
    def test_rank(self):
        expr = an.Rank() \
            .over(self.table_abc.foo) \
            .orderby(self.table_abc.date)

        q = Query.from_(self.table_abc).select(expr)

        self.assertEqual(
            'SELECT '
            'RANK() '
            'OVER(PARTITION BY "foo" ORDER BY "date") '
            'FROM "abc"', str(q))
예제 #3
0
    def test_table_prefixes_used_in_analytic_functions(self):
        expr = an.Rank().over(self.table_abc.foo).orderby(self.table_efg.date)

        query = (Query.from_(self.table_abc).join(
            self.table_efg, how=JoinType.left).on(
                self.table_abc.foo == self.table_efg.bar).select("*", expr))

        self.assertEqual(
            'SELECT *,RANK() OVER(PARTITION BY "abc"."foo" ORDER BY "efg"."date") '
            'FROM "abc" LEFT JOIN "efg" ON "abc"."foo"="efg"."bar"',
            str(query),
        )
예제 #4
0
    def test_rank_with_alias(self):
        expr = an.Rank().over(self.table_abc.foo).orderby(
            self.table_abc.date).as_("rank")

        q = Query.from_(self.table_abc).select(expr)

        self.assertEqual(
            "SELECT "
            "RANK() "
            'OVER(PARTITION BY "foo" ORDER BY "date") "rank" '
            'FROM "abc"',
            str(q),
        )