147 lines
2.4 KiB
SQL
147 lines
2.4 KiB
SQL
# name: test/sql/aggregate/aggregates/test_histogram.test
|
|
# description: Test histogram aggregation
|
|
# group: [aggregates]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
PRAGMA verify_external
|
|
|
|
query I
|
|
select histogram(NULL)
|
|
----
|
|
NULL
|
|
|
|
# Empty Table
|
|
query I
|
|
SELECT histogram(i) FROM range(100) tbl(i) WHERE 1=0;
|
|
----
|
|
NULL
|
|
|
|
query I
|
|
select histogram(1)
|
|
----
|
|
{1=1}
|
|
|
|
# Allow ascii characters in strings
|
|
query I
|
|
SELECT histogram('、')
|
|
----
|
|
{、=1}
|
|
|
|
query I
|
|
SELECT histogram(2) FROM range(100);
|
|
----
|
|
{2=100}
|
|
|
|
statement ok
|
|
CREATE TABLE hist_data (g INTEGER, e INTEGER)
|
|
|
|
statement ok
|
|
INSERT INTO hist_data VALUES (1, 1), (1, 2), (2, 3), (2, 4), (2, 5), (3, 6), (5, NULL)
|
|
|
|
|
|
query T
|
|
SELECT histogram(g) from hist_data
|
|
----
|
|
{1=2, 2=3, 3=1, 5=1}
|
|
|
|
query T
|
|
SELECT histogram(e) from hist_data
|
|
----
|
|
{1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
|
|
|
|
query I
|
|
select histogram(g)
|
|
from hist_data
|
|
group by g%2==0 ORDER BY g%2==0
|
|
----
|
|
{1=2, 3=1, 5=1}
|
|
{2=3}
|
|
|
|
query I
|
|
select histogram(g)
|
|
from hist_data
|
|
where g < 3
|
|
----
|
|
{1=2, 2=3}
|
|
|
|
statement ok
|
|
create table names (name string)
|
|
|
|
statement ok
|
|
insert into names values ('pedro'), ('pedro'), ('pedro'),('hannes'),('hannes'),('mark'),(null),('Hubert Blaine Wolfeschlegelsteinhausenbergerdorff Sr.');
|
|
|
|
query I
|
|
select histogram(name) from names;
|
|
----
|
|
{Hubert Blaine Wolfeschlegelsteinhausenbergerdorff Sr.=1, hannes=2, mark=1, pedro=3}
|
|
|
|
# Variant time type binding (Issue #3290)
|
|
query I
|
|
SELECT histogram(CAST('2021-08-20' AS TIMESTAMP_S));
|
|
----
|
|
{'2021-08-20 00:00:00'=1}
|
|
|
|
query I
|
|
SELECT histogram(CAST('2021-08-20' AS TIMESTAMP_MS));
|
|
----
|
|
{'2021-08-20 00:00:00'=1}
|
|
|
|
query I
|
|
SELECT histogram(CAST('2021-08-20' AS TIMESTAMP_NS));
|
|
----
|
|
{'2021-08-20 00:00:00'=1}
|
|
|
|
query I
|
|
SELECT histogram(CAST('15:05:42' AS TIME));
|
|
----
|
|
{'15:05:42'=1}
|
|
|
|
query I
|
|
SELECT histogram(CAST('15:05:42+00' AS TIME WITH TIME ZONE));
|
|
----
|
|
{'15:05:42+00'=1}
|
|
|
|
query I
|
|
SELECT histogram(CAST('2022-01-02' AS DATE));
|
|
----
|
|
{2022-01-02=1}
|
|
|
|
query II rowsort
|
|
select g,histogram(g) over (partition by g%2)
|
|
from hist_data;
|
|
----
|
|
1 {1=2, 3=1, 5=1}
|
|
1 {1=2, 3=1, 5=1}
|
|
2 {2=3}
|
|
2 {2=3}
|
|
2 {2=3}
|
|
3 {1=2, 3=1, 5=1}
|
|
5 {1=2, 3=1, 5=1}
|
|
|
|
#Corner cases
|
|
statement error
|
|
select histogram()
|
|
----
|
|
|
|
statement error
|
|
select histogram(*)
|
|
----
|
|
|
|
# enums
|
|
statement ok
|
|
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')
|
|
|
|
statement ok
|
|
CREATE TABLE enums (e mood)
|
|
|
|
statement ok
|
|
INSERT INTO enums VALUES ('happy'), ('ok')
|
|
|
|
query I
|
|
SELECT histogram(e) FROM enums
|
|
----
|
|
{ok=1, happy=1}
|