小白福在加油 发表于 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
例如:
select maxid
from (
select max(id) maxid, ORG_CODE
from plf_aos_auth_user
group by ORG_CODE
)t
order by maxid desc
复制代码
百度搜索MYSQL分组取前N条记录,思路大概是先算一个分组的排名字段,再筛选排名字段
服务器对SQL解析,预处理,再由优化器生成执行计划。通过了解执行计划看group by limit order by等顺序而不简单是括号优先级。比如索引对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 好。