美文网首页SQL-Server
SQL-Server之--排重

SQL-Server之--排重

作者: ys简单0 | 来源:发表于2017-09-15 14:33 被阅读32次

相信小伙伴们在后台开发过程中和数据库打交道经常需要排重,因此今天主要来记录一下和排重相关的几个关键字。
DISTINCT和GROUP BY,其实在一定情况下之前记录的TOP关键字也可以用来排重

DISTINCT

DISTINCT中文翻译为有区别的,在SQL语句中此关键字也只会返回有所不同的内容,把相同的内容过滤掉,因此起到排重的作用。基本语法为:
SELECT DISTINCT 列名称 FROM 表名称
DISTINCT依照 后面跟的列名称来排重,可以是一个字段,也可以是多个字段,并且只返回用来排重的这些字段,接下来就举例子来看什么情况下使用此排重方法。

首先我们来创建一张排重表,并使用INSERT INTO 排重表(id,name,identityid,age) VALUES('4','小果冻','130423199401102534','26')来插入几条数据,我们看最终的结果为:

1.png
现在有一个需求就是需要知道表中到底有几个身份证号号,可以发现小明小红identityid是相同的,接下里我们使用DISTINCT关键字看是否可以得到理想的结果
SELECT DISTINCT identityid FROM 排重表

结果为:

2.png
从上面我们可以看到得到了排重之后的identityid,由此可见关键字DISTINCT后面跟的列名称是用来排重的也是用来返回的。接下来我们看通过两个字段来排重,也就是说这两个字段均相同才算是重复
SELECT DISTINCT id,identityid FROM 排重表

结果为:

3.png
当然你也可以按除id外的所有字段来排重,但是需要注意的是DISTINCT后面跟的字段是排重字段也是最后输出结果的字段,而且此关键字必须放在SELECT后面,其他的前面,比如TOP等的前面.
接下来看一下和COUNT关键字共同使用的例子
//按一个字段排重后的count数
SELECT COUNT(DISTINCT age) FROM 排重表
//按多个字段排重的count数
SELECT COUNT (*)FROM(SELECT DISTINCT name,identityid,age FROM 排重表)AS b

运行结果大家可以自己试一下。

GROUP BY

GROUP BY分组统计,形式上也是用来排重,但是和上面的DISTINCT的使用场景不太一样,一般和聚合函数一起使用,像SUM,MAX等,小心小伙伴们看到下面的例子就可以体会到和DISTINCT的区别。

首先我们先来新建一张表,来简单的记录一下班级中学生的数学成绩,通过下面的sql语句来批量的插入数据

//注意使用的关键字是VALUES而不是VALUE
INSERT INTO score(id,name,class,mathscore) VALUES('4','小糖豆','二班','79'),('5','小狗答','三班','93'),('6','小乌龟','三班','76')

接下来我们看到这张表中的数据是这样的:

4.png

那么我如果想知道各个班级的平均成绩怎么办呢?

//解释一下这句sql,通过class进行分组后,计算SUM(mathscore)就会得到按照某个class计算的分数和,而COUNT(mathscore)则会得到某个class下几个mathscore,两者相除则是该班级成绩平均数,AS关键字之前已经记录过了,这就不重申了。
SELECT class,SUM(mathscore)/COUNT(mathscore) AS average FROM score GROUP BY class ORDER BY average DESC

运行结果为:

5.png

那如果想要知道某个班的最高分数呢?

SELECT class,MAX(mathscore) AS maxscore FROM score GROUP BY class ORDER BY maxscore DESC

运行结果为:

6.png

注意:SELECT 后面跟的列名称必须是GROUP BY子句后面的分组对象或聚合函数,否则会报错。如SELECT * FROM score GROUP BY class,id,name;在这条sql中是按照class,id,name来进行分组的,但是SELECT * 表示查询该表中所有字段,但又因为mathscore不做分组标志,因此会报错[Err] 42000 - [SQL Server]选择列表中的列 'score.mathscore' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

相关文章

  • SQL-Server之--排重

    相信小伙伴们在后台开发过程中和数据库打交道经常需要排重,因此今天主要来记录一下和排重相关的几个关键字。DISTIN...

  • 文档排重之SimHash算法

    不同网站间相互转载内容的情况非常常见,即使同一网站,不同的URL地址也可能对应相同内容,只是以不同的形式显示出来(...

  • sql-server

    1、下载网址https://docs.microsoft.com/zh-tw/sql/ssms/download-...

  • 文件排重

    相同文件的名字和类型可能不同, 但是md5值相同 使用shell获取文件大小和md5值 效率并不好, 7000张照...

  • 数据库基本概念-源动力

    遇事不会查文档: https://docs.microsoft.com/zh-cn/sql/sql-server/...

  • SQL查询基础-源动力

    遇事不会查文档: https://docs.microsoft.com/zh-cn/sql/sql-server/...

  • SQL-Server之--排序和分页

    在开始记录排序和分页之前先来记录几个与之相关的关键字TOP,COUNT,ORDER BY 1.TOP TOP关键字...

  • 对数组列表中对象排重

    2种格式数据排重 一、对数组中对象直接排重,序号据用","分割 二、数据排重为特定格式

  • 安装sql serve2016+JDK配置环境变量+解决KB29

    一.下载 安装网址:https://www.microsoft.com/zh-cn/sql-server/sql-...

  • SQL-Server之--基本关键字

    由于最近得兼职做后台的业务逻辑以及接口的工作,因此在此把最近总结到的有关数据库查询的东西进行一下总结和备忘。生活不...

网友评论

    本文标题:SQL-Server之--排重

    本文链接:https://www.haomeiwen.com/subject/svivqxtx.html