数据库中distinct关键字的使用
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
下面先来看看例子:
table表
字段1 字段2
id name
1 a
2 b
3 c
4 c
5 b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
select distinct name from table
得到的结果是:
----------
name
a
b
c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
select distinct name, id from table
结果会是:
----------
id name
1 a
2 b
3 c
4 c
5 b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。
我们再改改查询语句:
select id, distinct name from table
很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。
下面方法可行:
select *, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最后一项是多余的,不用管就行了,目的达到。。。。。
group by 必须放在 order by 和 limit之前,不然会报错
==============以上是关于Oracle的distinct的一种用法==============
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
二. distinct使用
1 Distinct 位置
单独的distinct只能放在开头,否则报错,语法错误
mysql> Select player_id,distinct(task_id) from task;
ERROR 1064 (42000): You havean error in your SQL syntax; check the manual that
corresponds to your MySQLserver version for the right syntax to use near 'disti
nct(task_id) from task' atline 1
现在把distinct放在开头
mysql> Select distinct(task_id),taskid from task;
查询成功
与其他函数使用时候,没有位置限制如下
Select player_id,count(distinct(task_id))from task;
这种情况下是正确的,可以使用。
2 Distinct用法
a.在count计算不重复的记录的时候能用到
比如SELECT COUNT( DISTINCT player_id ) FROM task;
就是计算talbebname表中id不同的记录有多少条
b,在需要返回记录不同的id的具体值的时候可以用
比如SELECT DISTINCT player_id FROM task;
返回talbebname表中不同的id的具体的值
c.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
比如SELECT DISTINCT player_id, task_id FROM task;
实际上返回的是player_id与task_id同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得player_id与task_id都相同的才被排除了,与我们期望的结果不一样,我们期望的是player_id不同被过滤
在这种情况下,distinct同时作用了两个字段,player_id,task_id
d.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
e. 其实还有另外一种解决方式,就是使用
SELECT player_id, task_id, count(DISTINCT player_id) FROM task.
虽然这样的返回结果多了一列无用的count数据(有时也许就需要这个数据)
f 同时我们还可以利用下面的方式解决b遇到的歧义问题通过group by 分组
select player_id,task_id from task group by player_id
数据库中distinct关键字的使用相关推荐
- PostgreSQL 数据库中 DISTINCT 关键字的 4 种用法
文章目录 DISTINCT DISTINCT ON IS DISTINCT FROM 聚合函数与 DISTINCT 大家好,我是只谈技术不剪发的 Tony 老师.PostgreSQL 不但高度兼容 S ...
- mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?
展开全部 SQL数据库中, DISTINCT表示去掉重复的行,作用是针对包含重复值的数据表,用于返回唯一不同的值.语法是636f707932313133353236313431303231363533 ...
- JAVA及数据库中的关键字(常用)
JAVA中的关键字 public/private/protected/class public 权限修饰符,不同包下,也可以使用private 被private修饰的成员,只能在本类中进行访问,其他类 ...
- 聊聊数据库中的关键字——字段、属性、列、元组、记录、表、主键、外键
学完数据库,我们对SQL SERVER 2008中的部分关键字有了大概的了解,下面我来总结一下几个比较重要的关键字:字段.属性.列.记录(元组).表.主键.外键. 一.字段:某一个事物的一个特征,或者 ...
- mysql中distinct关键字,MySQL关键字Distinct的详细介绍
DDL Prepare SQL: ? Prepare Data: ? 查询数据如下图所示: 第一种情况,使用Distinct关键字,查询单列数据,如下图所示: 结果:对 name 字段进行去重处理,符 ...
- mysql中distinct关键字_MySQL关键字Distinct的详细介绍
MySQL关键字Distinct用法介绍 DDL Prepare SQL: create table test(id bigint not null primary key auto_incremen ...
- mysql 去除重复 Select中DISTINCT关键字的用法(查询两列,只去掉重复的一列)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- 在数据库中使用关键字作为字段名
在Oracle 中只能用双引号"包围关键字.但由于Oracle中双引号内的字符串是区分大小写的,而不管创建表还是查询时,Oracle都会把字段名转成全部大写,所以,除非创建表时双引号内的字段 ...
- 数据库中distinct的用法,distinct和聚合函数一起使用,distinct的位置
distinct的详细用法 distinct的基本用法 distinct和聚合函数 distinct的位置 distinct的基本用法 一,house表,表结构如图 字段id,house_name,f ...
最新文章
- Oracle创建带有自增序列的表和字符串转日期的问题
- 恢复【谷歌浏览器开发者工具】默认设置(亲测)
- yum源yum-fastestmirror
- Android 屏幕尺寸知识
- 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
- NASA 传奇数学家去世,她曾笔算了登月轨道
- 把你的火狐浏览器改成Chrome样式
- 禁用行、列、单元格单元格编辑
- NB-Iot烟感02:NB-IOT概念和技术特点
- hp7610扫描到计算机无法激活,惠普HP Officejet 7610一体机解决扫描问题(一)
- 【Python精彩案例】生成动态二维码
- 互联网日报 | 58到家正式改名“天鹅到家”;华为“服务日”活动宣布延长一年;特斯拉上线电池回收服务...
- 交通网络教育计算机作业答案,上海交通大学网络教育-计算机应用模拟题及答案(基础知识1).docx...
- 基于Qt5图形视图框架的“俄罗斯方块”
- 陕西师范大学公费师范生计算机,陕西师范大学公费师范生2019年录取分数线-陕师大公费师范专业...
- php动态绘制仪表盘,Pyecharts制作酷炫仪表盘,还能实时更新!
- Python|自定义判断质数的函数
- 有一种缘,放手后成为风景。有一颗心,坚持中方显真诚。
- 高斯消元 卡我常数(shit)
- USB-RS232转换器芯片的特点与优势
热门文章
- 阿里云账号ID在哪查看?
- PyCharm三种解释器的区别(virtual Enviroment, system interpreter, conda Enviroment)
- An动画基础之按钮动画与基础代码相结合
- 从学术空间通往商业之路 系统性AI芯片专著《人工智能芯片设计》面世
- 数据分析-分类评价-PR与ROC曲线
- 面试题之优惠券超发怎么测试?
- 2022年最高效,踏实的Python学习笔记以及Python学习规划
- 飞机票航空售票查询预定系统(php+mysql)
- 日常英语口语练习-情景交际场景25(三)
- SQL Server返回插入数据的ID和受影响的行数