最后一步:按照条件:“仅显示平均呼叫持续时间大于所有呼叫的平均呼叫持续时间的国家”,我们可以很容易得出,查询最后的结果需要用HAVING
对聚合结果做下过滤,因为“所有呼叫的平均呼叫持续时间”和“均呼叫持续时间”我们已经统计出来了,因此大于长这样:
HAVING AVG(ISNULL(DATEDIFF(SECOND, call.start_time, call.end_time),0)) > (SELECT AVG(DATEDIFF(SECOND, call.start_time, call.end_time)) FROM call)
所以最后的SQL长这样:
--返回所有国家以及相关呼叫的数量及其平均持续通话时间(以秒为单位) 。在结果中,仅显示平均呼叫持续时间大于所有呼叫的平均呼叫持续时间的国家 。SELECT country.country_name, SUM(CASE WHEN call.id IS NOT NULL THEN 1 ELSE 0 END) AS calls, AVG(ISNULL(DATEDIFF(SECOND, call.start_time, call.end_time),0)) AS avg_diffFROM country -- 使用LEFT JOIN包括没有任何呼叫的国家LEFT JOIN city ON city.country_id = country.idLEFT JOIN customer ON city.id = customer.city_idLEFT JOIN call ON call.customer_id = customer.idGROUP BY country.id, country.country_name-- 过滤掉不符合条件的结果HAVING AVG(ISNULL(DATEDIFF(SECOND, call.start_time, call.end_time),0)) > (SELECT AVG(DATEDIFF(SECOND, call.start_time, call.end_time)) FROM call)
三.总结步骤
- 先明确需求
- 拆解展示字段和条件
- 确定所要用到的表
- 先写出整体框架SQL并打印结果看数据很重要这一步
- 创建子查询,并且测试结果 , 最后添加到整体框架SQL中
- 测试验证所有数据
- 添加备注,复杂SQL不写备注等于没写
推荐阅读
- 李佳琦前助理:30岁财务自由,住上海400多平豪宅,一个狗盆3000元
- 姚刚:一生无妻无子,如今53岁买千万豪宅一个人住
- 13快男第1个离婚的宁桓宇,回到老东家后,成了又一个江映蓉?
- 花呗逾期了被暂停使用要多久才能恢复 一个星期左右恢复
- 陈慧琳喊话刘德华:我有两个儿子,只要你看上,随便挑一个做女婿
- 周冬雨,观众在抛弃你的时候,屁都不放一个
- 端午节吃五黄餐
- 妻子不能生育,48岁的岳母给我出了一个主意,我终于如愿当爹了
- 82年发哥背后的俩龙套,一个拯救了香港电影,一个拯救了香港电视
- AI Agent+to B,下一个入口级平台机会