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关键字的使用相关推荐

  1. PostgreSQL 数据库中 DISTINCT 关键字的 4 种用法

    文章目录 DISTINCT DISTINCT ON IS DISTINCT FROM 聚合函数与 DISTINCT 大家好,我是只谈技术不剪发的 Tony 老师.PostgreSQL 不但高度兼容 S ...

  2. mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?

    展开全部 SQL数据库中, DISTINCT表示去掉重复的行,作用是针对包含重复值的数据表,用于返回唯一不同的值.语法是636f707932313133353236313431303231363533 ...

  3. JAVA及数据库中的关键字(常用)

    JAVA中的关键字 public/private/protected/class public 权限修饰符,不同包下,也可以使用private 被private修饰的成员,只能在本类中进行访问,其他类 ...

  4. 聊聊数据库中的关键字——字段、属性、列、元组、记录、表、主键、外键

    学完数据库,我们对SQL SERVER 2008中的部分关键字有了大概的了解,下面我来总结一下几个比较重要的关键字:字段.属性.列.记录(元组).表.主键.外键. 一.字段:某一个事物的一个特征,或者 ...

  5. mysql中distinct关键字,MySQL关键字Distinct的详细介绍

    DDL Prepare SQL: ? Prepare Data: ? 查询数据如下图所示: 第一种情况,使用Distinct关键字,查询单列数据,如下图所示: 结果:对 name 字段进行去重处理,符 ...

  6. mysql中distinct关键字_MySQL关键字Distinct的详细介绍

    MySQL关键字Distinct用法介绍 DDL Prepare SQL: create table test(id bigint not null primary key auto_incremen ...

  7. mysql 去除重复 Select中DISTINCT关键字的用法(查询两列,只去掉重复的一列)

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  8. 在数据库中使用关键字作为字段名

    在Oracle 中只能用双引号"包围关键字.但由于Oracle中双引号内的字符串是区分大小写的,而不管创建表还是查询时,Oracle都会把字段名转成全部大写,所以,除非创建表时双引号内的字段 ...

  9. 数据库中distinct的用法,distinct和聚合函数一起使用,distinct的位置

    distinct的详细用法 distinct的基本用法 distinct和聚合函数 distinct的位置 distinct的基本用法 一,house表,表结构如图 字段id,house_name,f ...

最新文章

  1. Oracle创建带有自增序列的表和字符串转日期的问题
  2. 恢复【谷歌浏览器开发者工具】默认设置(亲测)
  3. yum源yum-fastestmirror
  4. Android 屏幕尺寸知识
  5. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
  6. NASA 传奇数学家去世,她曾笔算了登月轨道
  7. 把你的火狐浏览器改成Chrome样式
  8. 禁用行、列、单元格单元格编辑
  9. NB-Iot烟感02:NB-IOT概念和技术特点
  10. hp7610扫描到计算机无法激活,惠普HP Officejet 7610一体机解决扫描问题(一)
  11. 【Python精彩案例】生成动态二维码
  12. 互联网日报 | 58到家正式改名“天鹅到家”;华为“服务日”活动宣布延长一年;特斯拉上线电池回收服务...
  13. 交通网络教育计算机作业答案,上海交通大学网络教育-计算机应用模拟题及答案(基础知识1).docx...
  14. 基于Qt5图形视图框架的“俄罗斯方块”
  15. 陕西师范大学公费师范生计算机,陕西师范大学公费师范生2019年录取分数线-陕师大公费师范专业...
  16. php动态绘制仪表盘,Pyecharts制作酷炫仪表盘,还能实时更新!
  17. Python|自定义判断质数的函数
  18. 有一种缘,放手后成为风景。有一颗心,坚持中方显真诚。
  19. 高斯消元 卡我常数(shit)
  20. USB-RS232转换器芯片的特点与优势

热门文章

  1. 阿里云账号ID在哪查看?
  2. PyCharm三种解释器的区别(virtual Enviroment, system interpreter, conda Enviroment)
  3. An动画基础之按钮动画与基础代码相结合
  4. 从学术空间通往商业之路 系统性AI芯片专著《人工智能芯片设计》面世
  5. 数据分析-分类评价-PR与ROC曲线
  6. 面试题之优惠券超发怎么测试?
  7. 2022年最高效,踏实的Python学习笔记以及Python学习规划
  8. 飞机票航空售票查询预定系统(php+mysql)
  9. 日常英语口语练习-情景交际场景25(三)
  10. SQL Server返回插入数据的ID和受影响的行数