distinct 用法

本事例实验用表task,结构如下
MySQL> desc task;
+-------------+------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+-------------------+-------+
| PLAYER_ID | bigint(20) | NO | PRI | NULL | |
| TASK_ID | int(11) | NO | PRI | NULL | |
| TASK_STATUS | tinyint(4) |NO | | NULL | |
| CREATE_DATE | datetime | YES | | NULL | |
| UPDATE_DATE |timestamp | NO | | CURRENT_TIMESTAMP | |
+-------------+------------+------+-----+-------------------+-------+

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,010评论 2 89
  • 情生 继续杜撰。 作为两个四大之一,越剧《梁祝》的剧情就不用我再介绍了,恐怕好多人都能背下全本来了。我就先来随便说...
    林宏海阅读 719评论 0 0
  • 乔任梁不幸离世以后,关于“抑郁症”的种种占据了社交圈的80%,作为一名曾经的中度抑郁症患者,我觉得很多都是蹭热度,...
    临渊_lx阅读 1,970评论 15 12