今天在刷牛客的SQL练习题时,碰到了having关键字,由于好久没使用了,所以借此写篇文章记录一下having的用法。

题目链接在此:SQL19

题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。

表结构:

解释一下单行数据:id为7的用户,使用的设备id为4321,性别为男,年龄26岁,复旦大学,gpa为3.6,在过去的30天里面活跃了9天,发帖数量为6,回答数量为52。

根据示例,查询结果应返回的数据如下:

表格解释:
平均发贴数低于5的学校或平均回帖数小于20的学校有2个
属于北京大学的用户的平均发帖量为2.500,平均回答数量为21.000
属于浙江大学的用户的平均发帖量为1.000,平均回答数量为2.000

编写的SQL语句:

select * from(select university, avg(round(question_cnt, 3)) as avg_question_cnt,avg(round(answer_cnt, 3)) as avg_answer_cnt from user_profile group by university
) as t
where t.avg_question_cnt < 5 or t.avg_answer_cnt < 20;

首先通过对学校字段分组查询得到辅助表,设为t,然后再对辅助表进行条件查询,即可得到结果。

但上面sql语句太长,其实还是可以优化的,这里得搞懂where和having的区别

where与having区别?

  1. 执行时机不同。where是分组之前进行过滤,即查询的是from后面的表,并且不满足where条件,不参与分组;而having是分组之后对结果进行过滤,是根据辅助表进行条件查询的;
  2. 判断条件不同。where不能对聚合函数进行判断,即where后面不能使用聚合函数,而having可以。

优化后的SQL语句:

select university, avg(round(question_cnt, 3)) as avg_question_cnt,avg(round(answer_cnt, 3)) as avg_answer_cnt
from user_profile
group by university
havingavg_question_cnt < 5 or avg_answer_cnt  <  20

SQL之having关键字用法相关推荐

  1. 【SQL】interval关键字用法

    [SQL]interval关键字使用-用法 取时间间隔,用于日期计算. 例如: 下面展示一些 应用代码. ##1.取最近29天的数据 select * from table where op_time ...

  2. oracle escape关键字用法

    在处理sql时,遇到insert 或update 的参数中含有特殊字符"&",下划线"_", 单引号" ' "等时,要做转义处理. ...

  3. SQL 里ESCAPE的用法

    TABLES:makt. SELECT SINGLE *FROM maktWHERE spras = 1AND maktx LIKE '%/_' ESCAPE '/' . SQL中escape的用法 ...

  4. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  5. oracle 默认escape_ORACLE中ESCAPE关键字用法

    ORACLE 中 ESCAPE 关键字用法 2012-09-19 00:00 比特网悠虎 关键字: 定义: escape 关键字经常用于使某些特殊字符,如通配符: '%','_' 转义为它们原来的 字 ...

  6. sql去重复操作详解SQL中distinct的用法

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...

  7. php全局变量的关键字,PHP变量作用域(全局变量局部变量)globalstatic关键字用法实例分析...

    本文实例讲述了PHP变量作用域(全局变量&局部变量)&global&static关键字用法.分享给大家供大家参考,具体如下: 我们知道,变量呢,其实就相当于我们用来储存信息的容 ...

  8. SQL LEFT JOIN 关键字

    SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键 ...

  9. MySQL查询语种关键字_SQL——SQL语言全部关键字详解

    http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...

最新文章

  1. C++ 数据类型转换
  2. 黄聪:第2章 并发操作的一致性问题 (2)
  3. Swift2.0语言教程之闭包
  4. 大图剪切工具,大图分割工具
  5. pat 乙级 1014 福尔摩斯的约会 (C++)
  6. 前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构
  7. 划痕实验 迁移面积自动统计_从Jupyter迁移到合作实验室
  8. 前端学习(2702):重读vue电商网站23之element-ui 如何按需导入
  9. python学习之wxPython
  10. 程序员出差是去干什么_为什么女生不适合做程序员?原来互联网公司女生少,是由于这几点...
  11. Linq to xml修改CDATA节点值
  12. 【Docker】02 Docker安装
  13. 国二计算机资料,计算机国二MS_Office高级应用资料.doc
  14. 小米android安装包下载安装,小米应用商店安装包下载
  15. bzoj2821 作诗(Poetize)
  16. 苹果app无法打开显示无法连接服务器,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...
  17. Notepad++的字体设置加Consolas和微软雅黑混合字体
  18. 安防想要抢食智能家居大蛋糕 应该如何转型?
  19. JSP界面——背景图片
  20. CRMEBV4小程序H5页面端宝贝列表分享海报以及会员中心分销推广不显示的常见问题解决

热门文章

  1. select中选中option的方法
  2. 207最新android书籍,《最强Android书 架构大剖析》PDF(高清版)
  3. JS逆向:猿人学爬虫比赛第九题详细题解
  4. 北京大学计算机学院复试名单2021,北京大学研究生招生简章2021(北京大学研究生复试名单)...
  5. 省市区json格式数据及异步请求json数据
  6. 基于tensorflow+CNN的报警信息短文本分类 代码理解(纯小白)
  7. App Store 审核被拒的各种原因
  8. Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务
  9. 校园网限速引起网络知识:网络配置ipconfig /release ipconfig /renew
  10. java.lang.VerifyError: Verifier rejected class 问题解决