ClickHouse/dbms/tests/queries/0_stateless/00409_shard_limit_by.sql
Constantin S. Pan cbc0f56af1 Mark all input columns in LIMIT BY as required output
The query analyzer only marks the actual arguments of LIMIT BY as required
output for the LimitBy step in the pipeline. This is fine, unless the query is
distributed, in which case the first stage might remove a column that is used
at the second stage (e.g. for ORDER BY) but is not part of the final select.

Prevent removal of any columns in LimitBy by marking all input columns as
required output.
2019-05-24 09:53:09 +01:00

39 lines
1.6 KiB
SQL

DROP TABLE IF EXISTS limit_by;
CREATE TABLE limit_by (Num UInt32, Name String) ENGINE = Memory;
INSERT INTO limit_by (Num, Name) VALUES (1, 'John');
INSERT INTO limit_by (Num, Name) VALUES (1, 'John');
INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (4, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (4, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (5, 'Bill');
INSERT INTO limit_by (Num, Name) VALUES (7, 'Bill');
INSERT INTO limit_by (Num, Name) VALUES (7, 'Bill');
INSERT INTO limit_by (Num, Name) VALUES (7, 'Mary');
INSERT INTO limit_by (Num, Name) VALUES (7, 'John');
-- Two elemens in each group
SELECT Num FROM limit_by ORDER BY Num LIMIT 2 BY Num;
-- LIMIT BY doesn't affect result of GROUP BY
SELECT Num, count(*) FROM limit_by GROUP BY Num ORDER BY Num LIMIT 2 BY Num;
-- LIMIT BY can be combined with LIMIT
SELECT Num, Name FROM limit_by ORDER BY Num LIMIT 1 BY Num, Name LIMIT 3;
-- Distributed LIMIT BY
SELECT dummy FROM remote('127.0.0.{2,3}', system.one) LIMIT 1 BY dummy;
SELECT dummy FROM remote('127.0.0.{2,3}', system.one) LIMIT 2 BY dummy;
SELECT 1 as one FROM remote('127.0.0.{2,3}', system.one) LIMIT 1 BY one;
-- Distributed LIMIT BY with LIMIT
SELECT toInt8(number / 5 + 100) AS x FROM remote('127.0.0.1', system.numbers) LIMIT 2 BY x LIMIT 5;
-- Distributed LIMIT BY with ORDER BY non-selected column
SELECT 1 AS x FROM remote('127.0.0.{2,3}', system.one) ORDER BY dummy LIMIT 1 BY x;
DROP TABLE IF EXISTS limit_by;