IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:DISTINCT

共 3 篇相关文章

IT 累计浏览 3,886

mysql 初探

这篇讲的是,一位有着多年理论学习但缺乏实战的开发者,如何重新打开 MySQL 的世界。文章从作者“温故知新”的视角出发,并未深入某个复杂案例,而是像一位耐心的向导,带读者重新梳理那些最常被提及也最易被忽略的基石概念。 作者回顾的焦点落在了 MySQL 最核心的两个支柱上:底层的 B+ 树索引结构如何决定了查询的效率,以及不同的事务隔离级别在并发场景下各自守护了什么、又可能牺牲了什么。对于许多刚接触数据库或工作后疏于回顾的开发者而言,这些概念或许都听过,但其精妙的设计与权衡细节却容易在日常使用中变得模糊。文章的价值恰恰在于,它以一种“回到起点”的坦诚,把这些知识点重新擦亮,并通过简明的逻辑将其串联。 它没有复杂的架构图或性能压测数据,却为许多“知其然不知其所以然”的日常操作提供了一个理解的基础框架。当再次面对一条慢查询日志或一个诡异的并发 bug 时,重温这些根本性的设计,或许能让人更快地锁定问题所在。

IT 累计浏览 3,938

过滤部分字段重复的数据

这篇讲的是在处理数据库查询时,一个看似简单却很实际的需求:如何过滤仅部分字段重复的记录。很多开发者习惯性地使用 `SELECT DISTINCT`,但它判断的是整行数据的唯一性。文章正是从这个常见的认知起点出发,点明了当业务要求基于特定字段(如姓名、电话)来去重,而允许其他字段(如ID、创建时间)不同时,`DISTINCT` 就无能为力了。 作者接着对比了两种关键的解决方案。一种是传统的 `GROUP BY` 结合聚合函数(如 `MAX`、`MIN`)来选取每组中的特定记录,这适用于明确需要保留哪条数据的场景。另一种是更现代的窗口函数方法(如 `ROW_NUMBER()`),它能为每组重复数据按规则排序并打上编号,再筛选编号为1的记录,这种方式在逻辑上更灵活,尤其适合复杂排序或需要保留“最新”、“第一条”等场景。 文章没有停留在语法层面,而是强调了选择哪种方案背后的思考:你需要明确“去重”的业务标准究竟是什么,以及对性能和结果完整性的要求。对于想要精准控制去重逻辑的开发者来说,理清 `DISTINCT`、`GROUP BY` 和窗口函数之间的差异与适用边界,是写出高效且正确查询的关键一步。

IT 累计浏览 1,831

关于mysql中的DISTINCT

这篇文章源自一次实际踩坑经历,作者在清理代理服务器日志中的IP数据时,试图用`select *, distinct ip from table`来去重,却发现无法得到预期结果。 问题根源在于对`DISTINCT`关键字的误解:它只能对整个`SELECT`列表中的所有列进行组合去重。当查询中还包含其他列(如文章中的原始日期列)时,除非所有数据行在所有列上都完全相同,否则无法实现仅按IP列去重的预期效果。 作者随后找到了正确的解决方案:使用`GROUP BY ip`配合`MAX(date)`这样的聚合函数。这种方法能先按IP分组,再为每个IP选取最新的日期,从而在保留每组其他信息的同时,精准地实现单列的去重与数据聚合。这对于需要保留分组最新状态的去重场景非常实用。 这个从错误尝试到找到正解的过程,清晰地区分了`DISTINCT`与`GROUP BY`的核心差异,能帮助开发者避免在项目里重复踩坑。