87 lines
1.8 KiB
SQL
87 lines
1.8 KiB
SQL
# name: test/sql/binder/test_having_alias.test
|
|
# description: Test that aliases can be used in the HAVING clause
|
|
# group: [binder]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
CREATE TABLE integers AS SELECT * FROM range(5) tbl(i);
|
|
|
|
# use an alias to an aggregate in the having clause
|
|
query II
|
|
SELECT i, COUNT(*) AS k FROM integers GROUP BY i HAVING k=1 ORDER BY i;
|
|
----
|
|
0 1
|
|
1 1
|
|
2 1
|
|
3 1
|
|
4 1
|
|
|
|
# alias cannot be qualified
|
|
statement error
|
|
SELECT i, COUNT(*) AS k FROM integers GROUP BY i HAVING integers.k=1 ORDER BY i;
|
|
----
|
|
Binder Error: column k must appear in the GROUP BY clause
|
|
|
|
# column name wins over the alias
|
|
query II
|
|
SELECT 1 AS i, COUNT(*) FROM integers GROUP BY i HAVING i=2;
|
|
----
|
|
1 1
|
|
|
|
# as if qualified
|
|
query II
|
|
SELECT i AS j, COUNT(*) AS i FROM integers GROUP BY j HAVING integers.i=1 ORDER BY i;
|
|
----
|
|
1 1
|
|
|
|
# or we use the group by alias
|
|
query II
|
|
SELECT i AS j, COUNT(*) AS i FROM integers GROUP BY j HAVING j=1 ORDER BY i;
|
|
----
|
|
1 1
|
|
|
|
query I
|
|
SELECT COUNT(i) AS j FROM integers HAVING j=5;
|
|
----
|
|
5
|
|
|
|
|
|
query I
|
|
SELECT COUNT(i) AS i FROM integers HAVING i=5;
|
|
----
|
|
5
|
|
|
|
query I
|
|
SELECT COUNT(i) AS i FROM integers GROUP BY i HAVING i=5;
|
|
----
|
|
|
|
query I
|
|
SELECT COUNT(i) AS i FROM integers HAVING i=5 ORDER BY i;
|
|
----
|
|
5
|
|
|
|
# use the same alias multiple times
|
|
query I
|
|
SELECT COUNT(i) AS j FROM integers HAVING j=j;
|
|
----
|
|
5
|
|
|
|
# multiple alias in HAVING to expression with side-effects
|
|
query I
|
|
SELECT COUNT(*) FROM (SELECT i, SUM(RANDOM()) AS k FROM integers GROUP BY i HAVING k=k) tbl(i, k);
|
|
----
|
|
5
|
|
|
|
# if this is qualified we get an error
|
|
statement error
|
|
SELECT COUNT(i) AS i FROM integers HAVING integers.i=5 ORDER BY i;
|
|
----
|
|
Binder Error: column i must appear in the GROUP BY clause
|
|
|
|
# recursive alias without aggregate
|
|
statement error
|
|
SELECT i + i AS i FROM integers HAVING i=5 ORDER BY i;
|
|
----
|
|
Binder Error: column i must appear in the GROUP BY clause |