mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-27 10:02:01 +00:00
cbc0f56af1
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.
39 lines
1.6 KiB
SQL
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;
|