mirror of https://github.com/citusdata/citus.git
162 lines
2.4 KiB
SQL
162 lines
2.4 KiB
SQL
-- More complex CTEs in WHERE
|
|
|
|
SET citus.enable_repartition_joins TO on;
|
|
|
|
-- CTE in WHERE basic
|
|
WITH events AS (
|
|
SELECT
|
|
event_type
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
user_id < 5
|
|
GROUP BY
|
|
event_type
|
|
ORDER BY
|
|
event_type
|
|
LIMIT 10
|
|
)
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
event_type
|
|
IN
|
|
(SELECT
|
|
event_type
|
|
FROM
|
|
events);
|
|
|
|
WITH users AS (
|
|
SELECT
|
|
events_table.user_id
|
|
FROM
|
|
events_table, users_table
|
|
WHERE
|
|
events_table.user_id = users_table.user_id
|
|
GROUP BY
|
|
1
|
|
ORDER BY
|
|
1
|
|
LIMIT 10
|
|
)
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
user_id IN
|
|
(
|
|
SELECT
|
|
*
|
|
FROM
|
|
users
|
|
);
|
|
|
|
|
|
WITH users AS (
|
|
SELECT
|
|
events_table.user_id
|
|
FROM
|
|
events_table, users_table
|
|
WHERE
|
|
events_table.user_id = users_table.user_id
|
|
GROUP BY
|
|
1
|
|
ORDER BY
|
|
1
|
|
LIMIT 10
|
|
)
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
user_id IN
|
|
(
|
|
SELECT
|
|
*
|
|
FROM
|
|
users
|
|
);
|
|
|
|
|
|
-- CTE with non-colocated join in WHERE
|
|
WITH users AS (
|
|
SELECT
|
|
events_table.user_id
|
|
FROM
|
|
events_table, users_table
|
|
WHERE
|
|
events_table.value_2 = users_table.value_2
|
|
GROUP BY
|
|
1
|
|
ORDER BY
|
|
1
|
|
LIMIT 10
|
|
)
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
user_id IN
|
|
(
|
|
SELECT
|
|
*
|
|
FROM
|
|
users
|
|
);
|
|
|
|
-- CTE in WHERE basic
|
|
-- this is a tricky query that hits an aggresive
|
|
-- check in subquery puwhdown after the recursive planning
|
|
-- where LIMIT should be allowed
|
|
-- if the query contains only intermediate results
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
event_type
|
|
IN
|
|
(WITH events AS (
|
|
SELECT
|
|
event_type
|
|
FROM
|
|
events_table
|
|
WHERE user_id < 5
|
|
GROUP BY
|
|
1
|
|
ORDER BY
|
|
1)
|
|
SELECT * FROM events LIMIT 10
|
|
);
|
|
|
|
-- CTE with non-colocated join in WHERE
|
|
-- this is a tricky query that hits an aggresive
|
|
-- check in subquery puwhdown after the recursive planning
|
|
-- where LIMIT should be allowed
|
|
-- if the query contains only intermediate results
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
events_table
|
|
WHERE
|
|
user_id IN
|
|
(WITH users AS
|
|
(SELECT
|
|
events_table.user_id
|
|
FROM
|
|
events_table, users_table
|
|
WHERE
|
|
events_table.value_2 = users_table.value_2
|
|
GROUP BY
|
|
1
|
|
ORDER BY
|
|
1
|
|
)
|
|
SELECT * FROM users LIMIT 10
|
|
);
|