1. 去除重复数据的概念与影响
在数据库中,重复数据指的是数据表中存在多条完全相同的记录,多数情况下这些重复数据对于分析带来的是负面的影响,会增加查询的时间和空间复杂度,同时也会影响数据的可靠性。
那么如何去除这些重复数据呢?
2. 基本方法:使用DISTINCT关键字
2.1 DISTINCT的作用
SQL语言中有一个关键字叫做DISTINCT,它的作用是从结果集中去掉重复数据。
SELECT DISTINCT column1, column2, ...
FROM table_name;
上述语句表示从数据表中选择指定列的不重复记录。
2.2 使用DISTINCT的示例
假设我们有一张学生表student,其中有重复记录:
id | name | age | gender | score |
---|---|---|---|---|
1 | 张三 | 18 | 男 | 89 |
2 | 李四 | 19 | 女 | 92 |
3 | 王五 | 20 | 男 | 88 |
4 | 张三 | 18 | 男 | 87 |
如果我们想要去除重复记录,只需使用以下语句:
SELECT DISTINCT id, name, age, gender, score
FROM student;
得到的结果如下:
id | name | age | gender | score |
---|---|---|---|---|
1 | 张三 | 18 | 男 | 89 |
2 | 李四 | 19 | 女 | 92 |
3 | 王五 | 20 | 男 | 88 |
3. 更高级的方法:使用GROUP BY和HAVING关键字
3.1 GROUP BY和HAVING的作用
GROUP BY和HAVING关键字可以将数据表中的记录分组,并对分组后的数据执行对应的聚合函数(如COUNT、SUM、AVG等),同时可以通过HAVING关键字对聚合函数进行筛选。
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
上述语句表示根据column1、column2等列分组,并对分组后的结果执行HAVING条件筛选。
3.2 使用GROUP BY和HAVING的示例
假设我们有一张订单表order,其中包含的字段有订单号、产品名称、数量、单价等:
order_id | product_name | num | price |
---|---|---|---|
1 | 苹果 | 2 | 5.5 |
2 | 苹果 | 4 | 5 |
3 | 香蕉 | 3 | 6 |
4 | 香蕉 | 2 | 4 |
5 | 橘子 | 5 | 3.5 |
现在我们想要统计每种产品的总销售额,并筛选出销售额大于20的产品名称:
SELECT product_name, SUM(num*price) AS total_sales
FROM order
GROUP BY product_name
HAVING total_sales > 20;
得到的结果如下:
product_name | total_sales |
---|---|
苹果 | 24.5 |
香蕉 | 18 |
4. 总结
DISTINCT、GROUP BY和HAVING关键字都能够去除数据库中的重复数据,但是它们的使用场景是不同的。对于简单的去重需求,DISTINCT关键字可以快速解决;对于需要进行分组统计的复杂需求,GROUP BY和HAVING关键字则是更好的选择。