首先,我们在数据库test下创建数据表cell,然后插入数据,代码如下:
USE test; DROP TABLE IF EXISTS cell; CREATE TABLE `test`.`cell`( `id` INT NOT NULL, `小区名称` VARCHAR(255) NULL, `基站名称` VARCHAR(255) NULL //最后一项不能有逗号,否则会报错 ); INSERT INTO `cell`(id,小区名称,基站名称) VALUES (1,"小区_11","基站1"), (2,"小区_12","基站1"), (3,"小区_13","基站1"), (4,"小区_21","基站2"), (5,"小区_22","基站2"), (6,"小区_23","基站2"); //char类型的数据需要用单引号或者双引号括起来
接下来,我们需要将数据进行处理,将同属于一个基站的小区只留一条数据,相当于对于基站名称列去重
我们执行语句:
SELECT id,小区名称,基站名称 FROM cell GROUP BY 基站名称;
分组会自动只保留一条小区数据,如果我们想保留指定的小区数据呢,比如2小区,也就是末尾带2的小区
我们使用临时表来操作,将分组后的最小,最大id通过union放在一起,作为条件筛选
CREATE TEMPORARY TABLE to_delete (`基站名称` VARCHAR(255) NOT NULL, delete_id INT NOT NULL); INSERT INTO to_delete(基站名称,delete_id) SELECT 基站名称, MIN(id) FROM cell GROUP BY 基站名称 HAVING COUNT(*) > 1 UNION SELECT 基站名称, MAX(id) FROM cell GROUP BY 基站名称 HAVING COUNT(*) > 1; SELECT * FROM cell WHERE id NOT IN (SELECT delete_id FROM to_delete);
一些注意事项:
1、mysql的字段名,表名通常不需要加任何引号,如果非要加上引号,必须加反引号。
2、mysql的别名可以不加引号,如果加引号,单、双、反引号都可以
3、单引号,双引号都可以用来表示字符串
4、表名和列名可以使用中文,但不推荐
原文:https://www.cnblogs.com/guojuxia/p/12489810.html