想在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 │
└────────┘