使用 "using" 而不是 "on" 交叉连接两个表

Cross joining two tables with "using" instead of "on"

我在一本书中发现了一个我无法理解的 SQL 查询。据我了解,有两个 tables - 日期有一个 date_id 和 test_Date 列,第二个 table 有 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 级别聚合。

我了解 usingon 上的使用。但是我不明白日期 table 是如何被引用两次的,这是否意味着它被加入了两次?

But what i dont get is how the date table is being reference twice, does it mean it is being joined twice?

是的,尽管将 t2 视为一个整体而不是日期的函数可能更容易 table:t2 是交易 table,但实际日期表示为test_date 而不是 ID。

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

  • 日期 table (t1) 的每一行输出一行,顺序为 test_date
  • 对于每一行,使用我们的 transactions-with-date table t2.
  • 计算在该日期或之前发生的所有交易的观察次数总和

I understand obs_cnt variable is being aggregated at a test_date level.

它正在针对 t1 test_date 进行聚合,这是我们用于select t2 中求和的行的约束。