用“使用”而不是“在”上交叉连接两个表

时间:2018-07-26 22:59:29

标签: sql using cross-join

我在一本书中发现了我无法理解的SQL查询。据我了解,有两个表-date具有date_id和test_Date列,第二个表具有date_id和obs_cnt。

select t1.test_date 
      ,sum(t2.obs_cnt)
from date t1
cross join
     (transactions join date using (date_id)) as t2
where t1.test_date>=t2.test_date
group by t1.test_date
order by t1.test_date

有人可以帮助我理解这段代码的作用或输出的样子吗。

我了解obs_cnt变量是在test_date级别聚合的。

我了解在using上放置on的用法。但是我没有得到的是日期表如何被引用两次,这是否意味着它被联接了两次?

1 个答案:

答案 0 :(得分:2)

  

但是我没有得到的是日期表如何被引用两次,这是否意味着它被联接了两次?

是的,尽管将t2作为一个整体而不是作为日期表的函数来考虑可能更容易:t2是事务表,但具有test_date的实际日期表示形式而不是ID。

我认为本书中的所有内容实际上都有一些上下文,但是看起来这会产生:

  • 日期表(t1)中每行的输出一行,按照test_date的顺序
  • 使用我们的日期交易表t2,对每一行总计总计在该日期或该日期之前发生的交易的观察值。
  

我了解obs_cnt变量是在test_date级别汇总的。

它是根据t1 test_date聚合的,这是我们用来选择t2中求和的行的约束。