尝试学习 SQL 聚合和子查询

时间:2021-07-20 13:22:18

标签: sql count sum aggregate

我正在努力改进我的查询写作,需要以下方面的帮助......

我有一个包含多个列的表,包括 Operation_Code、Operation_Category、Downtime_In_Minutes、Downtime(以过去 24 小时的百分比表示)。我的结果集的每一行都需要为每个 Operation_Code 和 SUM(Operation_Code 的每次出现次数)计算 SUM(Downtime_minutes)。停止永远是昨天。日期函数和格式返回昨天的日期。由于代码的长度,这在下面的查询中没有显示,但它有效。因此,结果中的每一行应如下所示:

  • 停止日期
  • 操作_代码
  • Operation_Category
  • 计数(每个 Op_Code 的出现次数)
  • 每个 Operation_Code 的所有停机时间的总和(以分钟为单位)
  • 过去 24 小时的百分比

示例结果:

StopDate     Op_Code     OP_Category    Count       Downtime (Minutes)     % of Last 24
7/18/2021    X123        Grinder        10          720                    50%
7/18/2021    A800        Cutter         12          360                    25%      
7/18/2021    O225        Polisher        5          60                      4%

我没有尝试任何聚合的查询基本上是:

Select StopDate, 
       OpCode, 
       OpCat
From   DTS
Where  StopDate = yesterday

基本问题是,我如何对每个唯一的 Operation_Code 的出现次数求和并求和以分钟为单位的总时间?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您只是在寻找聚合吗?然后你可以使用窗口函数来获取比率,我猜这是基于停机时间:

Select StopDate, OpCode, OpCat, count(*) as cnt,
       sum(Downtime_In_Minutes),
       sum(Downtime_In_Minutes) * 1.0 / nullif(sum(Downtime_In_Minutes) over ()) as 
From  DTS
Where StopDate = yesterday;

我假设您知道如何处理“昨天”,因为您说您已经有了一个查询。

按停止日期分组;