永洪社区

标题: sql语句 [打印本页]

作者: 小白福在加油    时间: 2024-7-2 15:14
标题: sql语句
mysql中distinct去重是先去重然后执行下面语句还是后去重

作者: yhdata_lyaa    时间: 2024-7-2 15:37
什么,数据库的问题吗
作者: 小白福在加油    时间: 2024-7-2 15:48
yhdata_lyaa 发表于 2024-7-2 15:37
什么,数据库的问题吗

写sql语句的时候
作者: 小白福在加油    时间: 2024-7-2 15:51
yhdata_lyaa 发表于 2024-7-2 15:37
什么,数据库的问题吗

例如select distinct(distinct task_id),task_num from Task order by task_num asc;,这个先去重在降序还是先降序在去重
作者: 阿姆斯特朗炮    时间: 2024-7-2 16:07
理论上先执行select 后面的distinct,然后将查询出来的结果通过order by再排序

作者: yanieye    时间: 2024-7-2 19:46
MySQL首先执行 DISTINCT 去重,然后根据 ORDER BY 子句对去重后的结果进行排序。确保所有在 ORDER BY 中提及的列也在 SELECT DISTINCT 中被选中,以避免潜在的错误。
作者: yhdata_TFDpK8ac    时间: 2024-7-3 11:09
小白福在加油 发表于 2024-7-2 15:51
例如select distinct(distinct task_id),task_num from Task order by task_num asc;,这个先去重在降序还 ...

我觉得select distinct (distinct task_id)这样的写法有语法问题。参考mysql文档distinct优化器,distinct和group by在优化器内部处理时相互转换,所以建议distinct可以用group by改写。group by>order by
例如:
  1. select maxid
  2. from (
  3.         select max(id) maxid, ORG_CODE
  4.         from plf_aos_auth_user
  5.         group by ORG_CODE
  6. )t
  7. order by maxid desc
复制代码
百度搜索MYSQL分组取前N条记录,思路大概是先算一个分组的排名字段,再筛选排名字段
服务器对SQL解析,预处理,再由优化器生成执行计划。通过了解执行计划看group by limit order by等顺序而不简单是括号优先级。比如索引对group by的影响(临时表 和 文件排序两种策略)。这其实非常复杂,我完全不了解,如果有兴趣可看相关文档和书籍。

望采纳。

作者: 小白福在加油    时间: 2024-7-3 14:00
统一回复一下,谢谢大家
作者: 小白福在加油    时间: 2024-7-3 14:03
yhdata_TFDpK8ac 发表于 2024-7-3 11:09
我觉得select distinct (distinct task_id)这样的写法有语法问题。参考mysql文档distinct优化器,distinc ...

了解过group by这个分组函数是不是得和聚合函数一起使用,要不就会报错
作者: 哈莉·奎茵    时间: 2024-7-3 14:50
本帖最后由 yhdata_roWRDCAN 于 2024-7-3 14:59 编辑
小白福在加油 发表于 2024-7-3 14:03
了解过group by这个分组函数是不是得和聚合函数一起使用,要不就会报错

也不完全,看你需求。就像你上面的sql语句,其实可以同等修改为:
select
    task_num,
    count(task_id) task_id_cnt
from (
   select
       task_num,
       task_id
   from Task
   group by
       task_num,
       task_id
)t
order by
    task_num
在大数据量情况下,gourp  by去重性能比 distinct 好。

作者: 小白福在加油    时间: 2024-7-8 11:22
哈莉·奎茵 发表于 2024-7-3 14:50
也不完全,看你需求。就像你上面的sql语句,其实可以同等修改为:
select
    task_num,

能不能稍微解释一下,有点不太理解




欢迎光临 永洪社区 (http://club.yonghongtech.com/) Powered by Discuz! X3.4