SQL聚合与子查询学习:按Operation_Code统计停机次数与总时长
实现代码
直接使用GROUP BY按目标维度聚合即可,完整查询语句如下:
SELECT StopDate, Operation_Code AS Op_Code, Operation_Category AS OP_Category, COUNT(*) AS `Count`, SUM(Downtime_In_Minutes) AS `Downtime (Minutes)`, -- 占比计算逻辑匹配示例结果:总停机分钟/24小时总分钟(1440)换算为百分比 CONCAT(ROUND(SUM(Downtime_In_Minutes)/1440*100, 0), '%') AS `% of Last 24` FROM DTS WHERE StopDate = yesterday GROUP BY StopDate, Operation_Code, Operation_Category
注意事项
- 同个
Operation_Code对应的Operation_Category、StopDate为固定值,因此加入分组规则不会影响聚合结果,如果你所用的SQL引擎支持非分组字段直接查询(比如MySQL开了非严格模式),也可以省略这两个字段的分组声明 - 若原表中已预计算好同操作编码对应的
过去24小时停机占比字段,可将占比计算逻辑替换为MAX(过去24小时停机占比) AS "% of Last 24" - 不同SQL方言对特殊字符别名的兼容规则不同,若别名报错可将反引号替换为双引号,或删除别名中的括号、百分号等特殊字符
内容的提问来源于stack exchange,提问作者Rich Stringer
相关产品推荐
相关产品推荐

