【问题标题】:Cross joining two tables with "using" instead of "on"使用“using”而不是“on”交叉连接两个表
【发布时间】:2018-07-26 22:59:28
【问题描述】:

我在一本书中发现了一个我无法理解的 SQL 查询。据我了解,有两个表 - 具有 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 上的用法。但是我不明白日期表是如何被引用两次的,这是否意味着它被加入了两次?

【问题讨论】:

  • @Rup Ya 它的 test_date。编辑问题以反映变化

标签: sql using cross-join


【解决方案1】:

但我不明白日期表是如何被引用两次的,这是否意味着它被加入了两次?

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

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

  • 日期表 (t1) 中的每一行输出一行,按 test_date 顺序输出
  • 对于每一行,使用我们的 transactions-with-date 表 t2 合计在该日期或之前发生的所有交易的观察次数。

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

它是针对 t1 test_date 进行聚合的,这是我们用来选择 t2 中被求和的行的约束。

【讨论】:

  • 小变化,每行的聚合将是在该日期或之前发生的观察次数的总和
  • 哎呀,是的 - 对不起!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多