citus/src/test/regress/sql/multi_single_relation_subqu...

201 lines
3.9 KiB
SQL

--
-- MULTI_SINGLE_RELATION_SUBQUERY
--
-- This test checks that we are able to run selected set of distributed SQL subqueries.
SET citus.next_shard_id TO 860000;
SET citus.task_executor_type TO 'task-tracker';
select
number_sum,
count(*) as total,
avg(total_count) avg_count
from
(select
l_suppkey,
l_linestatus,
sum(l_linenumber) as number_sum,
count(*) as total_count
from
lineitem
group by
l_suppkey,
l_linestatus) as distributed_table
where
number_sum >= 10
group by
number_sum
order by
total desc,
number_sum desc
limit 10;
-- same query above, just replace outer where clause with inner having clause
select
number_sum,
count(*) as total,
avg(total_count) avg_count
from
(select
l_suppkey,
l_linestatus,
sum(l_linenumber) as number_sum,
count(*) as total_count
from
lineitem
group by
l_suppkey,
l_linestatus
having
sum(l_linenumber) >= 10) as distributed_table
group by
number_sum
order by
total desc,
number_sum desc
limit 10;
select
(l_suppkey / 100) as suppkey_bin,
avg(total_count) avg_count
from
(select
l_suppkey,
sum(l_linenumber) as number_sum,
count(*) as total_count
from
lineitem
group by
l_suppkey,
l_linestatus) as distributed_table
group by
suppkey_bin
order by
avg_count desc, suppkey_bin DESC
limit 20;
select
total,
avg(avg_count) as total_avg_count
from
(select
number_sum,
count(*) as total,
avg(total_count) avg_count
from
(select
l_suppkey,
sum(l_linenumber) as number_sum,
count(*) as total_count
from
lineitem
where
l_partkey > 100 and
l_quantity > 2 and
l_orderkey < 10000
group by
l_suppkey) as distributed_table
where
number_sum >= 10
group by
number_sum) as distributed_table_2
group by
total
order by
total;
-- Check that we support subquery even though group by clause is an expression
-- and it is not referred in the target list.
select
avg(count)
from
(select
l_suppkey,
count(*) as count
from
lineitem
group by
(l_orderkey/4)::int,
l_suppkey ) as distributed_table;
-- we don't support subqueries with limit.
select
l_suppkey,
sum(suppkey_count) as total_suppkey_count
from
(select
l_suppkey,
count(*) as suppkey_count
from
lineitem
group by
l_suppkey
order by
l_suppkey
limit 100) as distributed_table
group by
l_suppkey
ORDER BY 2 DESC, 1 DESC
LIMIT 5;
-- Check that we don't support subqueries without aggregates.
select
DISTINCT rounded_tax
from
(select
round(l_tax) as rounded_tax
from
lineitem
group by
l_tax) as distributed_table
ORDER BY 1 DESC
LIMIT 5;
-- Check that we support subqueries with count(distinct).
select
avg(different_shipment_days)
from
(select
count(distinct l_shipdate) as different_shipment_days
from
lineitem
group by
l_partkey) as distributed_table;
select
avg(different_shipment_days)
from
(select
count(distinct l_shipdate) as different_shipment_days
from
lineitem
group by
l_partkey
having
count(distinct l_shipdate) >= 2) as distributed_table;
-- Check that if subquery is pulled, we don't error and run query properly.
SELECT max(l_suppkey) FROM
(
SELECT
l_suppkey
FROM (
SELECT
l_suppkey,
count(*)
FROM
lineitem
WHERE
l_orderkey < 20000
GROUP BY
l_suppkey) z
) y;