【趣学SQL】第三章:数据处理与管理 3.1数据清洗技术——给数据库做“数据SPA“的魔幻之旅

devtools/2025/1/23 16:18:02/

在这里插入图片描述

第三章:数据处理与管理

3.1 数据清洗技术——给数据库做"数据SPA"的魔幻之旅

欢迎来到「数据库美容院」!今天我们将化身"数据美容师",用一家虚拟网红餐厅的翻车案例,教你如何把脏乱差的原始数据变成清爽整洁的"素颜美女"。🧼✨


3.1.1 数据清洗的重要性——当餐厅吃出蟑螂

真实惨案
某餐厅因数据混乱导致:

  • 顾客生日祝福短信发给了已注销用户
  • 素食者收到牛排优惠券
  • 订单系统把"2023-02-30"当作有效日期

数据清洗的三大使命

  1. 删除重复:消灭克隆人订单(同一用户秒下5单佛跳墙)
  2. 填补空白:给缺失电话号码的顾客发不了外卖
  3. 格式整形:把"138一二三四5678"变成标准手机号

📌 行业金句:“Garbage in, garbage out”(垃圾进,垃圾出)——脏数据会让AI推荐香菜奶茶配螺蛳粉!


3.1.2 删除重复数据——消灭"影分身之术"

sql">-- 发现重复订单(同一用户+同一菜品+5分钟内)  
SELECT  customer_id,  dish_name,  COUNT(*) AS clone_count  
FROM orders  
GROUP BY customer_id, dish_name, DATE_FORMAT(order_time, '%Y%m%d%H%i')  
HAVING clone_count > 1;  -- 核弹级去重(保留最新记录)  
DELETE t1 FROM orders t1  
INNER JOIN orders t2   
WHERE t1.id < t2.id   AND t1.customer_id = t2.customer_id  AND t1.dish_name = t2.dish_name  AND TIMESTAMPDIFF(MINUTE, t1.order_time, t2.order_time) < 5;  

搞笑案例
某顾客因手抖连续提交12次"死亡辣度"火锅订单,后因厨房报警被列入黑名单!


3.1.3 更新缺失值——给失忆数据打补丁

sql">-- 用默认值填充空地址(暂存为"地址待补充")  
UPDATE customers  
SET address = '地址待补充'  
WHERE address IS NULL;  -- 用平均值替代异常价格(防止-999元漏洞)  
UPDATE menu  
SET price = (  SELECT ROUND(AVG(price), 2)   FROM menu   WHERE price BETWEEN 10 AND 1000  
)  
WHERE price < 0;  

高级技巧

sql">-- 三套车填充法  
COALESCE(phone, '未知号码') -- 优先级填充  
IFNULL(email, 'default@restaurant.com') -- 简单替换  
CASE WHEN birthdate IS NULL THEN '2000-01-01' ELSE birthdate END -- 条件判断  

3.1.4 格式化数据——强迫症患者的福音

sql">-- 手机号标准化(131-2345-6789 → 13123456789)  
UPDATE customers  
SET phone = REPLACE(REPLACE(phone, '-', ''), ' ', '');  -- 日期统一格式化(美式/中式混搭 → 标准ISO格式)  
UPDATE orders  
SET order_date = DATE_FORMAT(STR_TO_DATE(order_date, '%m/%d/%Y'), '%Y-%m-%d')  
WHERE order_date LIKE '%/%';  

经典乱象

  • 手机号:138一二三4五六78138 1234 5678138-1234-5678
  • 日期:2023年12月32日(是的,真有勇士这么存!)

3.1.5 数据类型转换——数据界的"变形记"

sql">-- 修复价格字段(varchar误存了¥符号)  
ALTER TABLE menu MODIFY price DECIMAL(10,2);  
UPDATE menu  
SET price = CAST(REPLACE(price, '¥', '') AS DECIMAL(10,2));  -- 时间戳转换(字符串转真实时间)  
UPDATE user_actions  
SET action_time = FROM_UNIXTIME(CAST(action_time_str AS UNSIGNED))  
WHERE action_time_str REGEXP '^[0-9]{10}$';  

血泪教训
某系统用varchar存库存数量,直到出现"库存充足"、"约100件"等文本值,导致促销活动崩溃!


3.1.6 常见的数据清洗工具——瑞士军刀套装

工具名称适用场景经典操作
SQL基础清洗DELETE/UPDATE+正则表达式
Python复杂逻辑清洗Pandas的fillna()+apply()
OpenRefine可视化清洗聚类相似值
dbt自动化清洗流水线测试断言+文档生成

工具选型段子

  • SQL就像厨房菜刀——基础但万能
  • Python像料理机——能打碎一切复杂问题
  • OpenRefine是雕花工具——专治各种"视觉洁癖"

课后彩蛋:数据清洗冷知识

  • 最离奇的数据污染案例:某电商数据库出现"怀孕的男性用户"(性别字段被篡改)
  • MySQL的utf8其实是阉割版,真正支持emoji的是utf8mb4
  • 1970年代的数据清洗需要物理擦除打孔卡片

现在你已经成为"数据清洗界的保洁战神"!下一章我们将进入《分区表与分区索引——给数据库做"分舱救灾"的硬核指南》的魔幻现实主义领域,记得戴上防毒面具——脏数据的味道可比鲱鱼罐头还刺激! 🚀


http://www.ppmy.cn/devtools/152930.html

相关文章

网站HTTP改成HTTPS

您不仅需要知道如何将HTTP转换为HTTPS&#xff0c;还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS&#xff1f; 与非安全HTTP于不同&#xff0c;安全域使用SSL&#xff08;安全套接字层&#xff09;服务器上的加密代…

nuxt3项目打包部署到服务器后配置端口号和开启https

nuxt3打包后的项目部署相对于一般vite打包的静态文件部署要稍微麻烦一些&#xff0c;还有一个主要的问题是开发环境配置的.env环境变量在打包后部署时获取不到&#xff0c;具体的解决方案可以参考我之前文章 nuxt3项目打包后获取.env设置的环境变量无效的解决办法。 这里使用的…

Java菜鸟养成计划(java基础)--java数据类型

数据类型 1、什么是数据类型&#xff1f;2、java中的数据类型有哪些&#xff1f;3、基本数据类型有哪些&#xff1f;3.1、布尔类型&#xff08;boolean&#xff09;3.2、字符类型3.3、整形&#xff08;默认int&#xff09;3.4、浮点型【默认double】小数3.5、基本数据类型之间的…

【力扣】2.两数相加

题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会…

回归算法、聚类算法、决策树、随机森林、神经网络

这也太全了&#xff01;回归算法、聚类算法、决策树、随机森林、神经网络、贝叶斯算法、支持向量机等十大机器学习算法一口气学完&#xff01;_哔哩哔哩_bilibili 【线性回归、代价函数、损失函数】动画讲解_哔哩哔哩_bilibili 14分钟详解所有机器学习算法&#xff1a;…

基于单片机的智能家居控制系统设计及应用

摘要 : 智能家居控制系统包括对家电实现远距离控制和近距离控制的一种控制型系统,通过系统内的 TC35 模块对控制信息进行采集,并将这些控制信息发送到 STC89C52 模块中去,由单片机发出系统控制指令,从而实现家居家电的控制。 关键词 :单片机 ; 智能家居 ; 家居生活 ; 控…

第3天:阿里巴巴微服务解决方案概览

一、阿里巴巴微服务解决方案概述 阿里巴巴在微服务领域贡献了多个开源项目&#xff0c;形成了完整的微服务解决方案&#xff0c;广泛应用于分布式系统开发。其中&#xff0c;Spring Cloud Alibaba 是基于 Spring Cloud 构建的一站式微服务解决方案&#xff0c;集成了多个阿里巴…

BUUCTF_Web(October 2019 Twice SQL injection)

October 2019 Twice SQL injection 知识点&#xff1a; 二次注入&#xff1a; 当用户提交的恶意数据被存入数据库后&#xff0c;应用程序再把它读取出来用于生成新的SQL语句时&#xff0c;如果没有相应的安全措施&#xff0c;是有可能发生SQL注入的&#xff0c;这种注入就叫…