1、首先以frtm_ld2_wbjyzbdf为例,查询表的数据可以看到:
2、情况一:使用distinct关键字,再结合orderby语句使用,若执行:selectdistinctfw.zb_mcfromfrtm_ld2_wbjyzbdffworderbylength(fw.zb_lx);如果执行当前sql则会出现如下错误:
3、若换一种写法,如果将以上sql的orderby中的字段放到selectdistinct中如:selectdistinctfw.zb_mc,fw.zb_lxfromfrtm_ld2_wbjyzbdffworderbylength(fw.zb_lx);
4、由此可见可得出:如果使用distinct关键字,且使用了orderby。orderby中的字段一定要在distinct后出现。
5、情况二:select中、groupby中、orderby中字段一致:selectfw.zb_mcfromfrtm_ld2_wbjyzbdffwgroupbyfw.zb_mcorderbyfw.zb_mc;
6、情况三:结合上述语句,在orderby中加上个字段如:selectfw.zb_mcfromfrtm_ld2_wbjyzbdffwgroupbyfw.zb_mcorderbylength(fw.zb_lx),fw.zb_mc;可见会报错。
7、情况四:有些小伙伴们可能想上述为啥还报错呢,难道是orderby中出现的字段没有在select中出现么,下面来改一下:selectfw.zb_mc,max(fw.zb_lx)fromfrtm_造婷用痃ld2_wbjyzbdffwgroupbyfw.zb_mcorderbylength(fw.zb_lx),fw.zb_mc;
8、可是还会报错,为什么呢?下面就在groupby上再加上:sele罕铞泱殳ctfw.zb_mc,fw.zb_lxfromfrtm_ld2_wbjyzbdffwgroupbyfw.zb_mc,fw.zb_lxorderbylength(fw.zb_lx),fw.zb_mc;这样之后再来执行一下:
9、果然,执行上述sql就是正确的,为什么呢?因为orderb鲻戟缒男y出现的字段必须要在groupby中出现,而groupby中出现的字段不一定要在order芟鲠阻缒by中出现。下面再来看一个例子:如果我去掉orderby中的一个字段或者去掉select中的一个字段都不会报错。selectfw.zb_mcfromfrtm_ld2_wbjyzbdffwgroupbyfw.zb_mc,fw.zb_lxorderbylength(fw.zb_lx),fw.zb_mc;selectfw.zb_mc,max(fw.zb_lx)fromfrtm_ld2_wbjyzbdffwgroupbyfw.zb_mcorderbyfw.zb_mc;