【题目】

编写一个SQL查询,查找学生表中所有重复的学生名。

【解题思路】

1.看到“找重复”的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给姓名列计数。

2. 分组汇总后,生成了一个如下的表。从这个表里选出计数大于1的姓名,就是重复的姓名。

【解题步骤】

  • 方法一

1)创建一个辅助表,将姓名列进行行分组汇总

​select 姓名, count(姓名) as 计数
from 学生表
group by 姓名;

2)选出辅助表中计数大于1的姓名

select 姓名 from 辅助表
where 计数 > 1;

3)结合前两步,将“创建辅助表”的步骤放入子查询

select 姓名 from
(select 姓名, count(姓名) as 计数from 学生表group by 姓名
) as 辅助表
where 计数 > 1;

结果:

  • 方法二

这时候有的同学可能会想,为什么要这么麻烦创建一个子查询,不能用这个语句(将count放到where字句中)直接得出答案吗?

select 姓名
from 学生表
group by 姓名
where count(姓名) > 1;

如果我们运行下这个sql语句,会报下面的错误,问题出在哪里呢?

前面提到聚合函数(count),where字句无法与聚合函数一起使用。因为where子句的运行顺序排在第二,运行到where时,表还没有被分组。(如果不清楚,可以系统看下我之前的课程《从零学会SQL:汇总分析》)

如果要对分组查询的结果进行筛选,可以使用having子句。所以,这道题的最优方法如下:

select 姓名
from 学生表
group by 姓名
having count(姓名) > 1;

【本题考点】

1)考察思路,有两种解题方法,但是使用having语句的方法更高效。

2)考察对having语句的掌握,很多人会把聚合函数写到where子句中。

3)熟记SQL子句的书写顺序和运行顺序。

【举一反三】

本题也可以拓展为:找出重复出现n次的数据。只需要改变having语句中的条件即可:

select 列名
from 表名
group by 列名
having count(列名) > n;

推荐:如何提升你的分析技能,实现升职加薪?

sql having是什么意思_图解sql面试题:如何查找重复数据?相关推荐

  1. 【SQL开发实战技巧】系列(七):从有重复数据前提下如何比较出两个表中的差异数据及对应条数聊起

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  2. sql 过滤空值_图解 SQL,这简直太形象了吧!

    作者: 不剪发的Tony老师 来源:CSDN 链接:http://r6d.cn/qKD6 本文介绍关系数据库的设计思想:在 SQL 中,一切皆关系.在计算机领域有许多伟大的设计理念和思想,例如: 在 ...

  3. sql:命名管道管道程序_学习SQL:命名约定

    sql:命名管道管道程序 A naming convention is a set of unwritten rules you should use if you want to increase ...

  4. sql 左联接 全联接_学习SQL:联接多个表

    sql 左联接 全联接 If you want to get something meaningful out of data, you'll almost always need to join m ...

  5. left join 临时表_图解SQL的JOIN

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  6. sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  7. lamda表达式修改数据_图解sql面试题:如何按条件修改数据?

    ​[题目] 下图表名是"班级表",请将班级中所有的1班.2班交换,0班变为3班.要求只使用更新语句(update),不要使用select语句. [解题思路] 1. 题目要求按条件更 ...

  8. 对应sql建表_图解SQL面试题:如何查找工资前三高的员工

    [题目] ​"成绩表"记录了学生的学号,学生选修的课程,以及对应课程的成绩. 为了对学生成绩进行考核,现需要查询每门课程的前3高成绩. 注意:如果出现并列第一的情况,则同为第一名. ...

  9. sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!

    点击上方蓝字关注小姐姐吧从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付.现在偶尔需要到后台的 SQL Server 里追查一些数 ...

最新文章

  1. Android Retrofit使用教程(三):Retrofit与RxJava初相逢
  2. RHEL中的arp命令。
  3. Handlebars的基本用法
  4. n 个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为 O(N)
  5. Linux下.rar文件解压
  6. VS 编写 x64 内联汇编
  7. php self this static,php面向对象中self和static的区别
  8. 小程序开发小结-线下服务器域名部署等
  9. 关于新版本Firefox浏览器无法使用firebug与firepath问题的解决方案
  10. java中元数据是什么_java 元数据
  11. 虚拟机搭建与镜像文件
  12. 计算机智能化的例子,工程机械智能化技术案例实例.ppt
  13. 做好职业规划,做一个平凡而不平庸的自己
  14. U盘无法打开的解决方法大全
  15. delaunay三角剖分与delaunay四面体
  16. Tensorflow进阶
  17. 利用fiddler和低版本的iTunes实现iOS抓包
  18. 55--mvc:annotation-driven标签解析
  19. TM1637数码管显示 HAL库
  20. Java图片处理 - 复制

热门文章

  1. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)
  2. Java基础11-封装(思想、访问权限、this、构造方法)
  3. Selenium-几种操作
  4. USACO 1.2 Milking Cows (枚举)
  5. 老李分享:基于图像识别的跨平台的手机自动化测试方案
  6. CSS学习-网页导航栏
  7. java-弹簧布局(自适应窗口)
  8. C语言中关于字符数组输入,scanf没执行
  9. html的组织顺序是什么,css如何组织?
  10. 立方体引起的引力异常计算&画图