在 sql 查询中使用 group/order by 和 union 子句
Posted
技术标签:
【中文标题】在 sql 查询中使用 group/order by 和 union 子句【英文标题】:Using group/order by with union clause in sql query 【发布时间】:2021-03-30 05:18:43 【问题描述】:我有四个 sql 查询给了我相同的列,所以我尝试使用 UNION
子句将它们组合起来。以下是我尝试过的,但它给了我一个错误:
select clientid,
'Test1' as client_name,
client_timestamp,
sum(client_counts) as count,
processIds as contracts
from output_1
group by 1,2,3,5
order by 1
UNION
select clientid,
'Test2' as client_name,
client_timestamp,
sum(client_counts) as count,
'' as contracts
from output_2
group by 1,2,3,5
order by 1
UNION
select clientid,
'Test3' as client_name,
client_timestamp,
sum(kite_count) as count,
process_metric as contracts
from output_3
group by 1,2,3,5
order by 1
UNION
select clientid,
'Test4' as client_name,
execution_client_ts as client_timestamp,
sum(kite_count) as count,
process_data as contracts
from output_4
group by 1,2,3,5
order by 1
我得到的错误是 UNION 行周围的“无效语法”。我在这里做错什么了吗?
【问题讨论】:
【参考方案1】:union
查询只能有一个 order by
子句。
如果您对整个结果集的排序感到满意,您可以删除所有order by
子句,只保留查询末尾的最后一个子句。它适用于union
生成的整个数据集。
请注意,您的 UNION
s 等同于 UNION ALL
s - 因为每个成员的客户名称不同 - 应该这样表述。
另一方面,如果您想订购达到子结果,那么这是不同的。基本上,每个成员都需要一个标志,然后可以用来识别每个组。客户名称可能是一个不错的选择,所以:
order by client_name, client_id
【讨论】:
我是否需要将所有查询括在括号中,然后将 order by 放在最后,或者只从除最后一个之外的所有查询中删除 orderby 并且它应该可以工作?下面好吗?select .. from output1 group by 1,2,3,5 union all select .. from output2 group by 1,2,3,5 union all select .. from output1 group by 1,2,3,5 order by 1
@AndyP:删除除最后一个之外的所有内容都应该有效,如文档中所示:docs.aws.amazon.com/redshift/latest/dg/…以上是关于在 sql 查询中使用 group/order by 和 union 子句的主要内容,如果未能解决你的问题,请参考以下文章