又是一条sql语句。
前两天,朋友问我一个问题:若表里面的数据已经排过序了(字符串排序),我要怎么查询才能够从里面按照首字母分组呢?例如(a11,a12,a34,b22,b34)=> [(a11,a12,a34),(b22,b34)]。 当时我一时间没有想出了,只能说了一个拙劣的方案: like 'a%'。既然字母开头分组,那就要查询26次了。
后来的后来,我突然想到,首字母排序,这么常用的东西,不可能还要这么麻烦啊,肯定有好方案的,说不定sql就有呢?据我所知,标准化sql,有很多内置函数。还是那样,简单搜索一下,发现还真有。 left(a, 1)其中a就是相应字段。整条语句是这样的。
select count(*),left(a, 1) from table group by left(a, 1)
上面的查询告诉我们,字段a的首字母开头的数量各有多少。例如,上面例子的查询结果是 [ {3,a}, {2,b} ],前三个是a,后两个是b。知道了各字母开头有多少个,我们就可以通过跳帧,可以成功分组。
成功。
省事的sql。