MySQL取出表中排序数据且不重复 删除重复数据(1/2)
今日做一个功能需求,从表中排序取出前十个且数据不一致的数据,如下列a表中的值有以下数据:
代码如下 | |
+----+----------+ | id | user | +----+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | wangwu | | 4 | zhangsan | | 5 | zhaosi | | 6 | wangwu | | 7 | lisi | | 8 | lisi | | 9 | zhaosi | +----+----------+ 9 rows in set (0.00 sec) |
我们需要取出id最大的前四位,且user不能一致的信息,按照以上信息以及需求,我们要搜索出结果为
zhaosi
lisi
wangwu
zhangsan
不能按照普通的做法,如:
代码如下 | |
+----+--------+ | id | user | +----+--------+ | 9 | zhaosi | | 8 | lisi | | 7 | lisi | | 6 | wangwu | +----+--------+ 4 rows in set (0.00 sec) |
这样搜索出来的有重复值,得使用distinct关键字
代码如下 | |
+----------+ | user | +----------+ | zhaosi | | wangwu | | lisi | | zhangsan | +----------+ 4 rows in set (0.00 sec) |
其实应该是lisi与wangwu互换一下才是比较理想的,因为lisi最大的ID是8,而wangwu最大的ID是6,可能是lisi有一个ID为2导致的,我们把ID为2的删除,在来试试
代码如下 | |
Query OK, 1 row affected (0.02 sec)
mysql> select * from a; +----+----------+ | id | user | +----+----------+ | 1 | zhangsan | | 3 | wangwu | | 4 | zhangsan | | 5 | zhaosi | | 6 | wangwu | | 7 | lisi | | 8 | lisi | | 9 | zhaosi | +----+----------+ 8 rows in set (0.00 sec)
mysql> select distinct user from a order by id desc limit 4; +----------+ | user | +----------+ | lisi | | zhaosi | | wangwu | | zhangsan | +----------+ 4 rows in set (0.00 sec) |
结果正是由于前边有较低的ID记录影响了排序。
虽然这条语句能搜索正确的效果,但可能排序不是那么理想,也就是ID最大的前四位能搜索出来,但在这四位数据里并不是按照ID大小排序的。
例1测试数据
代码如下 | |
/* 表结构 */ /* 插入测试数据 */ SELECT * FROM `t1`;
|
查找id最小的重复数据(只查找id字段)
代码如下 | |
/* 查找id最小的重复数据(只查找id字段) */ |
查找所有重复数据
代码如下 | |
/* 查找所有重复数据 */
|
查找除id最小的数据外的重复数据
代码如下 | |
/* 查找除id最小的数据外的重复数据 */
|