Mysql的distinct语句和group by,order by
2007-09-17 10:58:46 来源:WEB开发网先和这个比较一下:
mysql>selectcom_id,job_timefromf_job orderbyjob_timedesclimit10; Te:webwebphpfhr ee.txt
+--------+---------------------+
|com_id|job_time |
+--------+---------------------+
| 2205|2006-09-2916:30:11|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 19084|2006-09-2916:27:55|
| 2205|2006-09-2916:27:22|
| 2715|2006-09-2916:18:36|
+--------+---------------------+
10rowsinset(0.06sec)
发现,distinct恰巧和前面第一次测试的结果相反处理我们的信息,他把隔行的看作不同的结果输出,这就导致了2205的记录又出现了。
然后我就用了groupby语句,应该可以吧,结果也让我。。。:
mysql>selectcom_idfromf_jobgroupbycom_id orderbyjob_timedesclimit10;
+--------+
|com_id|
+--------+
| 19084|
| 2197|
| 19917|
| 19580|
| 19520|
| 19664|
| 19397|
| 19900|
| 1176|
| 19449|
+--------+
10rowsinset(0.03sec)
这和distinct的结果一样,这倒不出乎意料,然后我又加入分组job_time,看看:
mysql>selectcom_idfromf_jobgroupbycom_id,job_time orderbyjob_timedesclimit10;
+--------+
|com_id|
+--------+
| 2205|
| 19084|
| 2205|
| 2715|
| 2197|
| 19580|
| 19917|
| 19580|
| 19520|
| 19900|
+--------+
10rowsinset(0.03sec)
这结果差一点点了,然后我再distinct(com_id)一下,应该可以了吧!看看:
mysql>selectdistinct(com_id)fromf_jobgroupbycom_id,job_time orderbyjob_timedesclimit10; Te:webwebphpfhr ee.txt
+--------+
|com_id|
+--------+
| 19084|
| 2197|
| 19917|
| 19580|
| 19520|
| 19664|
| 19397|
| 19900|
| 1176|
| 19449|
+--------+
10rowsinset(0.04sec)
汗,这和没加groupby的一点区别都没,怎么这样弱呀!没办法,这怎么办,犹豫中。。。
上面的问题彻底的说明了这样一个事实:distinct只能返回它的目标字段,而无法返回其它字段。。。
汗,这和没加groupby的一点区别都没,怎么这样弱呀!没办法,这怎么办,犹豫中。。。
------------------------------------
想起了一个很能骚的一个人--phzzy,这jh,qq说了句话,果然在,他玩php,马上求助,经过1个多小时的艰苦YY,终于这鸟人先大爷我一步给出语句:
select(`com_id`),max(`job_time`)from`f_job`GROUPBY`com_id`orderbymax(`job_time`)limit10;
mdgb,终于明白了,刚拿到这语句就明白了。
我tmd知道这是2次排序,md,groupby是一次,然后无论怎么样,都不可能2次排序,因为第二次必须借助内部的集聚函数。。。。。。我怎么没想到max,气死我了。
更多精彩
赞助商链接