Presto SQL - 两个完全不同的表连接平行而不是垂直

     2023-03-21     76

关键词:

【中文标题】Presto SQL - 两个完全不同的表连接平行而不是垂直【英文标题】:Presto SQL - Two completely different tables to join parallel instead of vertical 【发布时间】:2021-11-06 04:18:43 【问题描述】:

我有两张表,其中包含完整的数据集和标题。

我设法连接在一起,但使用下面的代码,但这是垂直组合。

QUERY = """
SELECT SUM(CAST(US.amount as DECIMAL(13,2))) filter (where type IN ('USA')) as "USA Net Amount" from da1.tb1 
UNION 
SELECT SUM(CAST(EU.amount as DECIMAL(13,2))) filter (where type IN ('EU')) as "EU Net Amount" from da2.tb2
"""
results = fetch_data(QUERY)
display(results)
results.to.csv('output.csv',index=False)

下面是我的输出,第二行是欧盟净额输出。

USA Net Amount
50.00
100.00

我想要实现的东西,欧元净额输出为新的第二列。

USA Net Amount EU Net Amount
50.00 100.00

【问题讨论】:

也许是 CROSS JOIN 代替? 或者只使用逗号 SELECT SUM(CAST(US.amount as DECIMAL(13,2))) 过滤器(其中输入 IN ('USA'))作为来自 da1 的“美国净金额”。 tb1 , SELECT SUM(CAST(EU.amount as DECIMAL(13,2))) 过滤器(其中输入 IN ('EU'))作为来自 da2.tb2 的“EU Net Amount” @jarlh - 'CROSS' 的输入不匹配 @Emanuele - 这也不起作用 【参考方案1】:
select t1."USA Net Amount", t2."EU Net Amount"
FROM
    (SELECT SUM(CAST(US.amount as DECIMAL(13,2))) filter (where type IN ('USA')) as "USA Net Amount"
     from da1.tb1) t1
CROSS JOIN
    (SELECT SUM(CAST(EU.amount as DECIMAL(13,2))) filter (where type IN ('EU')) as "EU Net Amount"
     from da2.tb2) t2

不过,不知道这个语法是否支持?

符合 SQL-2016 使用了 SQL-2016 之外的以下功能: T612,高级 OLAP 操作 T611,基本 OLAP 操作 F591,派生表 F401,扩展连接表

【讨论】:

它必须是更好/优化的输出方式,好像有更多列,上面的脚本似乎非常重复【参考方案2】:

在 UNION ALL 中的查询中添加类型列(这里需要 UNION ALL,而不是 UNION)来指示国家和使用条件聚合:

select max(AMT) FILTER(WHERE type="USA") as "USA Net Amount", 
       max(AMT) FILTER(WHERE type="EU") as "EU Net Amount"
from      
(
    --aggregation in union ALL can be executed in parallel
    SELECT SUM(CAST(US.amount as DECIMAL(13,2)))  as Amt, type from da1.tb1 where type IN ('USA') group by type
    UNION ALL ---not UNION !
    SELECT SUM(CAST(EU.amount as DECIMAL(13,2)))  as Amt, type from da2.tb2 where type IN ('EU')  group by type
) as s

或在 UNION ALL 之后使用单个聚合步骤:

select sum(AMT) FILTER(WHERE type="USA") as "USA Net Amount", 
       sum(AMT) FILTER(WHERE type="EU") as "EU Net Amount"
from      
(
    SELECT CAST(US.amount as DECIMAL(13,2)) as Amt, type from da1.tb1 where type IN ('USA')
    UNION ALL ---not UNION !
    SELECT CAST(EU.amount as DECIMAL(13,2))  as Amt, type from da2.tb2 where type IN ('EU')
) as s

【讨论】:

UNION ALL 也只做垂直输出 @Alex UNION 做 DISTINCT。 UNION ALL 将数据集合二为一,不应用 distict。 UNION = UNION ALL + DISTINCT。 UNION ALL 在完全并行模式下执行得更快,因为它没有 DISTINCT

不要重复自己:相同的 SQL 查询,但有两个不同的表

】不要重复自己:相同的SQL查询,但有两个不同的表【英文标题】:Don\'trepeatyourself:sameSQLquery,buttwodifferenttables【发布时间】:2013-04-1212:18:42【问题描述】:我有一个SQL查询,其代码完全相同,但有两个不同的表(AUDIT_TRAIL_ARCHIVE... 查看详情

如何在 LINQ sql 中将两个表与一个具有不同值的表连接起来?

】如何在LINQsql中将两个表与一个具有不同值的表连接起来?【英文标题】:HowtojointwotableswithonetablehavingdistinctvalueinLINQsql?【发布时间】:2018-02-0916:47:44【问题描述】:我有两个表emp_details,其中我有emp_id、emp_name和emp_addresss作为... 查看详情

比较来自两个不同数据库的表 SQL Developer

】比较来自两个不同数据库的表SQLDeveloper【英文标题】:ComparetablesfromtwodifferentdatabasesSQLDeveloper【发布时间】:2013-01-2919:42:54【问题描述】:我正在使用SQLdeveloper连接数据库,我目前正在参与复制测试:这里是源和目标的链接:*... 查看详情

一文理解presto两种join算法实现

我们在《Presto中支持的七种Join类型》这篇文章中介绍了Presto可用的JOIN操作的基础知识,以及如何在SQL查询中使用它们。有了这些知识,我们现在可以了解Presto的内部结构以及它如何在内部执行JOIN操作。本文将介绍Presto... 查看详情

SQL 追加具有完全相同列但 ID 不同的表

】SQL追加具有完全相同列但ID不同的表【英文标题】:SQLappendtableswithexactsamecolumnsbutdifferentIDs【发布时间】:2014-01-1521:18:00【问题描述】:假设我有数千个表,每个表有1050列,它们都在一个数据库中。是否有SQL命令将一个DB中的... 查看详情

如何连接来自两个不同 PDO 对象的表?

】如何连接来自两个不同PDO对象的表?【英文标题】:HowdoIjointablesfromtwodifferentPDOobject?【发布时间】:2013-08-1015:41:42【问题描述】:我不知道我必须如何连接来自两个不同PDO对象的表。我希望大家能帮助我解决这个问题。非常感... 查看详情

如何在sql中连接来自不同表的两个字段

】如何在sql中连接来自不同表的两个字段【英文标题】:howtojointwofieldfromdifferenttableinsql【发布时间】:2019-03-2723:49:27【问题描述】:我在phpmyadmin中有两个不同的表。一个是tbl_user,另一个是donate。现在我想从tbl_user中获取donation_... 查看详情

连接两个具有不同键名的表

】连接两个具有不同键名的表【英文标题】:Jointwotableswithdifferentkeyname【发布时间】:2018-12-0314:13:07【问题描述】:尝试实现以下场景,使用相同的键连接两个表(A、B)过滤表(c)加入第1步的结果和第2步的结果。这里它有不... 查看详情

sql连接两个以上的表

】sql连接两个以上的表【英文标题】:Sqljoinmorethantwotables【发布时间】:2021-12-2614:22:39【问题描述】:我有三个表transaction、transaction-docs和generic-transaction-task。transaction-docs和generic-transaction-task表是在参数transactionId(外键关系)... 查看详情

SQL - 从两个不同的表返回数据

】SQL-从两个不同的表返回数据【英文标题】:SQL-Returndatafromtwodiffernttables【发布时间】:2016-11-1218:11:34【问题描述】:我有两个表BOOKINGS和WORKERS。基本上有一个工人的桌子,还有一个桌子来跟踪工人在一个时间框架内必须做什么... 查看详情

连接两个具有相同键但不同字段的表

】连接两个具有相同键但不同字段的表【英文标题】:Joiningtwotableswithsamekeysbutdifferentfields【发布时间】:2021-07-1414:51:56【问题描述】:我有两个表都具有相同的字段除了一个。我想将这两个表与结果表结合起来,结果表中包含... 查看详情

检查SQL中的表中是不是连续出现两个不同的值?

】检查SQL中的表中是不是连续出现两个不同的值?【英文标题】:CheckiftwodifferentvaluesappearsuccessivelyinatableinSQL?检查SQL中的表中是否连续出现两个不同的值?【发布时间】:2016-09-2612:55:33【问题描述】:有一个表是这样的(列比较... 查看详情

连接来自两个不同数据库的表

】连接来自两个不同数据库的表【英文标题】:Joiningtablesfromtwodifferentdatabases【发布时间】:2013-03-2216:38:00【问题描述】:$db=mysql_connect("localhost","testuser1","testuser1")ordie(mysql_error());$db2=mysql_connect("localhost","testuser2","testuser2" 查看详情

SQL:连接多个不同大小的表

】SQL:连接多个不同大小的表【英文标题】:SQL:JOINmultipletableswithdifferentsize【发布时间】:2016-08-3118:14:53【问题描述】:我不是经常使用数据库的人,所以答案很简单,但我找不到。这是我的数据库的简化版本(在SQLITE中):我... 查看详情

在两个不同数据库中的表之间连接?

】在两个不同数据库中的表之间连接?【英文标题】:Joinbetweentablesintwodifferentdatabases?【发布时间】:2011-08-0714:08:56【问题描述】:在MySQL中,我有两个不同的数据库--我们称它们为A和B。是否可以在数据库A中的表与数据库B中的... 查看详情

两个不同的表连接视图

】两个不同的表连接视图【英文标题】:Twodifferenttablejoinview【发布时间】:2017-04-3023:47:03【问题描述】:我试图了解他希望我选择什么,因为没有表或属性具有object_name或object_type。有人知道我的老师在说什么吗?“选择object_nam... 查看详情

ORACLE PL/SQL 触发器使用两个不同的表

】ORACLEPL/SQL触发器使用两个不同的表【英文标题】:ORACLPL/SQLTriggerUsingTwodifferenttables【发布时间】:2017-09-2912:20:23【问题描述】:除了编写迁移SQL和一些基本触发器之外,我对PL/SQL主题的经验并不多。因此,我会直接问我的问题... 查看详情

SQL 优化 - 根据列值连接不同的表

】SQL优化-根据列值连接不同的表【英文标题】:SQLOptimization-Joindifferenttablesbasedoncolumnvalue【发布时间】:2012-05-0804:27:23【问题描述】:我有一个表,其中包含一个作为“标志”的列,用于决定从哪个表中提取附加信息(即值1从... 查看详情