【问题标题】:SQL Query - Joining and AggregatingSQL 查询 - 连接和聚合
【发布时间】:2023-02-03 12:38:21
【问题描述】:

我需要每小时对一个表运行一次查询,该表连接和聚合来自另一个具有数百万行的表的数据。

    select f.master_con, 
        s.containers 
    from 
        (
            select master_con 
            from shipped 
            where start_time >= a and start_time <= a+1
        ) f, 
        (
            select master_con, 
                 count(distinct container) as containers 
            from picked
        ) s
        where f.master_con = s.master_con

上面的这个查询是有效的,确切的语法可能不正确,因为我是凭记忆写的。

在子查询 's' 中,我只想计算 'f' 查询中每个 master_con 的容器,我认为我的查询运行了很长时间,因为我正在计算所有 master_con 的容器,但随后仅从 ' F'

有没有更好、更有效的方法来编写这种类型的查询?

(最后,我将从上面的这个查询中求和(容器)以获得那个小时内运送的总容器)

【问题讨论】:

    标签: sql oracle-sqldeveloper


    【解决方案1】:

    最有可能的是。你能提供一些简化的示例表结构吗?此外,正在使用的 join 方法已经被弃用了一段时间。您应该明确声明您的联接。下面应该是一个改进。使用了左外部连接,这样您就可以获得所有符合条件的托运人记录并保留它们,即使它们不在选择的表中也是如此。如果您希望它们消失,请将其更改为内部连接。

        SELECT shipped.master_con, 
            COUNT(DISTINCT picked.containers) AS containers
        FROM shipped LEFT OUTER JOIN
            Picked ON picked.master_con = shipped.master_con
        WHERE shipped.start_time BETWEEN a AND a+1
        GROUP BY shipped.master_con
    

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 1970-01-01
      • 2023-03-06
      • 2021-07-03
      • 2012-09-28
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多