如何嵌套SUM与JOIN查询:关联两表统计时长
解决方案
你可以通过两种方式实现需求,以下是具体SQL语句及说明:
方式一:先分组统计再关联(推荐,性能更优)
先对scrap_log按Reason分组计算总时长,再通过code关联scrap_reasons获取对应描述:
SELECT sr.description AS Description, sl.total_duration AS Total FROM ( -- 子查询:统计每个Reason对应的总时长 SELECT Reason, SUM(Duration) AS total_duration FROM scrap_log GROUP BY Reason ) sl -- 关联scrap_reasons表,匹配code和Reason JOIN scrap_reasons sr ON sl.Reason = sr.code;
方式二:先关联再分组
先将两张表关联,再按code和description分组统计总时长:
SELECT sr.description AS Description, SUM(sl.Duration) AS Total FROM scrap_log sl JOIN scrap_reasons sr ON sl.Reason = sr.code GROUP BY sr.code, sr.description;
结果说明
两种方式都会得到你期望的输出:
| Total | Description |
|---|---|
| 60 | Bad Color |
| 42 | Bad Shape |
| 66 | Bad Size |
注:如果需要保留
scrap_reasons中没有对应scrap_log记录的条目(比如code=14的"Bad etc.."),可以将JOIN改为LEFT JOIN,此时对应的Total会显示为NULL。
内容的提问来源于stack exchange,提问作者Nizoo
相关产品推荐
相关产品推荐

