首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Presto - Union & Limit

Presto - Union & Limit
EN

Stack Overflow用户
提问于 2020-11-25 23:37:32
回答 1查看 515关注 0票数 1

目前,我有一个CTE,它正在构建一个数据列表和一个随机行号

我想要做的是根据一些条件输出几个联合在一起的查询。使用联合查询可以很好地执行查询,但是当我向任何查询添加限制时,它就不能工作了。

有没有一种方法可以运行我的查询并获得不同的子集?

示例:

代码语言:javascript
复制
with selection as (
select account, address, type, random(1000)
from details
)

select 
  account,
  address
from details
where type = 'a'
order by random 
limit 50

union all

select 
  account,
  address
from details
where type = 'b'
order by random 
limit 50

union all

select 
  account,
  address
from details
where type = 'c'
order by random 
limit 50
EN

回答 1

Stack Overflow用户

发布于 2020-11-25 23:43:23

实际上,这里根本不需要工会:

代码语言:javascript
复制
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY type ORDER BY random) rn
    FROM details
    WHERE type IN ('a', 'b', 'c')
)

SELECT account, address
FROM cte
WHERE rn <= 50;

如果您真的想使用联合方法,那么以下语法可能会起作用,将每个limit子查询放在一个单独的闭包中:

代码语言:javascript
复制
SELECT account, address
FROM
(SELECT account, address
 FROM details
 WHERE type = 'a'
 ORDER BY random)
UNION ALL
(SELECT account, address
 FROM details
 WHERE type = 'b'
 ORDER BY random)
UNION ALL
(SELECT account, address
 FROM details
 WHERE type = 'c'
 ORDER BY random)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65007911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档