Files
email-tracker/external/duckdb/test/sql/aggregate/aggregates/test_histogram.test
2025-10-24 19:21:19 -05:00

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}