vertica中clickhouse any的类似物

问题描述 投票:0回答:2

我们可以在clickhouse中使用下一个语法:

select id, max(value1), any(value2) from scheme.table group by id

Any 返回可能值之一,其行为是不确定的。 vertica中有类似的东西吗?

我知道我可以只使用 max 或 min 函数,但我需要更快的方法

sql clickhouse vertica
2个回答
0
投票

根据https://docs.vertica.com/23.4.x/en/sql-reference/functions/,没有直接模拟

但是你可以尝试使用 FIRST_VALUE + ORDER BY RANDOM()

SELECT DISTINCT 
 id, 
 FIRST_VALUE(value) OVER (PARTITION BY id ORDER BY RANDOM()) AS any_value 
FROM table

0
投票

ANY()
将返回随机选取的值,所以我同意@Slach的答案 - 但由于您的要求是速度,我在专用查询中使用Vertica的分析限制子句来随机选取any value2内容,并且将其加入主查询。

WITH 
-- some sample data that we would have expected from you ....
indata(id,value1,value2) AS (                                                                                                                                                 
          SELECT 1,32,42
UNION ALL SELECT 1,33,43
UNION ALL SELECT 1,34,44
UNION ALL SELECT 1,35,45
UNION ALL SELECT 1,36,46
UNION ALL SELECT 2,32,42
UNION ALL SELECT 2,33,43
UNION ALL SELECT 2,34,44
UNION ALL SELECT 2,35,45
UNION ALL SELECT 2,36,46
)
-- real query starts here, replace following comma with "WITH"
,
anyvalue2 AS (
  SELECT
    id
  , value2
  FROM indata
  LIMIT 1 OVER(PARTITION BY id ORDER BY RANDOM())
)
SELECT
  indata.id
, MAX(value1) AS value1
, anyvalue2.value2
FROM indata
JOIN anyvalue2 USING(id)
GROUP BY 1,3
ORDER BY 1
;
-- out  id | value1 | value2
-- out ----+--------+--------
-- out   1 |     36 |     46
-- out   2 |     36 |     42
© www.soinside.com 2019 - 2024. All rights reserved.