如何在Presto SQL中进行左连接? [英] How to Left Join in Presto SQL?

查看:0
本文介绍了如何在Presto SQL中进行左连接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无论如何也想不出Presto中的一个简单的左联接,即使在阅读了文档之后也是如此。我非常熟悉Postgres,并在那里测试了我的查询,以确保我没有明显的错误。请参考以下代码:

select * from

(select cast(order_date as date),   
        count(distinct(source_order_id)) as prim_orders, 
        sum(quantity) as prim_tickets, 
        sum(sale_amount) as prim_revenue 
from table_a
where order_date >= date '2018-01-01'
group by 1)

left join

(select summary_date, 
        sum(impressions) as sem_impressions, 
        sum(clicks) as sem_clicks, 
        sum(spend) as sem_spend,  
        sum(total_orders) as sem_orders, 
        sum(total_tickets) as sem_tickets, 
        sum(total_revenue) as sem_revenue 
from table_b
where site like '%SEM%'
and summary_date >= date '2018-01-01'
group by 1) as b

on a.order_date = b.summary_date

运行时出现以下错误

SQL Error: Failed to run query
  Failed to run query
    line 1:1: mismatched input 'on' expecting {'(', 'SELECT', 'DESC', 'WITH', 
'VALUES', 'CREATE', 'TABLE', 'INSERT', 'DELETE', 'DESCRIBE', 'GRANT', 
'REVOKE', 'EXPLAIN', 'SHOW', 'USE', 'DROP', 'ALTER', 'SET', 'RESET', 'START', 'COMMIT', 'ROLLBACK', 'CALL', 'PREPARE', 'DEALLOCATE', 'EXECUTE'} (Service: AmazonAthena; Status Code: 400; Error Code: InvalidRequestException; Request ID: a33a6671-07a2-4d7b-bb75-f70f7b82409e)
line 1:1: mismatched input 'on' expecting {'(', 'SELECT', 'DESC', 'WITH', 'VALUES', 'CREATE', 'TABLE', 'INSERT', 'DELETE', 'DESCRIBE', 'GRANT', 'REVOKE', 'EXPLAIN', 'SHOW', 'USE', 'DROP', 'ALTER', 'SET', 'RESET', 'START', 'COMMIT', 'ROLLBACK', 'CALL', 'PREPARE', 'DEALLOCATE', 'EXECUTE'} (Service: AmazonAthena; Status Code: 400; Error Code: InvalidRequestException; Request ID: a33a6671-07a2-4d7b-bb75-f70f7b82409e)

推荐答案

我注意到的第一个问题是,您的JOIN子句假定第一个子查询别名为a,但它根本没有别名。我建议为该表设置别名,看看是否可以修复它(我还建议在cast()语句之外显式地为order_date列设置别名,因为您是在该列上联接)。

试试:

select * from

(select cast(order_date as date) as order_date,   
        count(distinct(source_order_id)) as prim_orders, 
        sum(quantity) as prim_tickets, 
        sum(sale_amount) as prim_revenue 
from table_a
where order_date >= date '2018-01-01'
group by 1) as a

left join

(select summary_date, 
        sum(impressions) as sem_impressions, 
        sum(clicks) as sem_clicks, 
        sum(spend) as sem_spend,  
        sum(total_orders) as sem_orders, 
        sum(total_tickets) as sem_tickets, 
        sum(total_revenue) as sem_revenue 
from table_b
where site like '%SEM%'
and summary_date >= date '2018-01-01'
group by 1) as b

on a.order_date = b.summary_date

这篇关于如何在Presto SQL中进行左连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆