如何在ClickHouse数据库中动态使用LIMIT



想在ClickHouse数据库中使用limit,就像param一样,它从前面传给我,如果我收到它,我想使用limit;如果没有收到,我想不使用。

我知道Postgresql中的例子:

SELECT * FROM table
LIMIT CASE WHEN @param > 0 THEN @param END;

但我不知道在ClickHouse中,如果没有串联笔划,它是如何制作的。因为如果我在sql脚本中写了LIMIT,那么我需要设置一些数字,否则它将不起作用。

SELECT*FROM表当@param>0 THEN@param END;

我想要有条件的限制。

首先,限制查询通常应该有一个ORDER BY子句,因此您的起点应该是:

SELECT *
FROM yourTable
LIMIT CASE WHEN @param > 0 THEN @param END
ORDER BY some_col;

不过这也不起作用。一个常见的解决方法使用ROW_NUMBER()窗口功能:

SELECT *
FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY some_col) rn
FROM yourTable
) t
WHERE @param <= 0 OR rn <= @param;

我认为没有问题

select * from numbers(10) limit case when uptime()>0 then uptime() else 1 end;
SELECT *
FROM numbers(10)
LIMIT multiIf(uptime() > 0, uptime(), 1)
Query id: f14d41af-67e4-43e5-9804-dfb5126e256b
┌─number─┐
│      0 │
│      1 │
│      2 │
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
│      9 │
└────────┘

最新更新