MySQL取出表中排序数据且不重复

SQL/NoSQL 2012-08-30 MySQL,SQL

今日做一个功能需求,从表中排序取出前十个且数据不一致的数据,如下列a表中的值有以下数据:

mysql> select * from 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 

不能按照普通的做法,如:

mysql> select * from a order by id desc limit 4;
+----+--------+
| id | user   |
+----+--------+
|  9 | zhaosi |
|  8 | lisi   |
|  7 | lisi   |
|  6 | wangwu |
+----+--------+
4 rows in set (0.00 sec)

这样搜索出来的有重复值,得使用distinct关键字

mysql> select distinct user from a order by id desc limit 4; 
+----------+
| 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的删除,在来试试

mysql> delete from a where 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大小排序的。

 

 

 

文字链接:《MySQL取出表中排序数据且不重复

文章地址:http://www.qttc.net/201208198.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 1