精华内容
下载资源
问答
  • 一.group_concatgroup_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])group_concat()会计算哪些行属于同一组,将属于同一组列显示出来。要返回哪些列,由函数参数(就是字段...

    一.group_concat

    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

    group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

    group_concat函数应该是在内部执行了group by语句,这是我的猜测。

    1.测试语句:

    1

    SELECT group_concat(town) FROM `players` group by town

    结果去查找town中去查找哪些值是一样的,如果相等,就全部列出来,以逗号分割进行列出,如下:

    group_concat(town)

    北京,北京
    长沙

    2.测试:

    1

    2

    SELECT group_concat( town )

    FROM players

    结果:

    group_concat(town)

    长沙,北京,北京,

    上面是否可以证明,group_concat只有与group by语句同时使用才能产生效果? 下面进行了实际测验

    3.测试常量对group_concat()的配置影响:

    1

    SET @@GROUP_CONCAT_MAX_LEN=4

    手册中提到设置的语法是这样的:

    1

    SET [SESSION | GLOBAL] group_concat_max_len = val;

    两种有什么区别?

    1

    SET @@global.GROUP_CONCAT_MAX_LEN=4;

    global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;

    4.使用语句

    1

    SELECT group_concat(town) FROM `players`

    结果得到:
    group_concat(town)

    长沙,北京,长沙,北京

    结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果。

    原因可以这样理解:group_concat()得到是属于x组的所有成员(函数里面列参数指定需要显示哪些字段)。x组从哪里来?如果没有group by进行指定,那么根本不知道group_concat()根据哪个分组进行显示出成员。所以,像上面没有group by子句的时候,就显示了长沙和北京。

    实际中什么时候需要用到这个函数?

    假如需要查询的结果是这样:左边显示组名,右边想显示该组别下的所有成员信息。用这个函数,就可以省去很多事情了。

    另外,假如我这样使用:SELECT group_concat( name, sex ) FROM `players` town。意义不大。group_concat()指定一个列是最好的情况。如果指定了多个列。那么显示结果类似这样:

    1

    group_concat(name,sex)

    王滔,王小明男,刘惠女,舒明女

    二.FIND_IN_SET

    MySQL手册中find_in_set函数的语法解释:

    FIND_IN_SET(str,strlist)

    str 要查询的字符串 strlist 参数以,分隔的字段名 如 (1,2,6,8,10,22)

    查询字段(strlist)中包含(str)的结果,返回结果为null或记录

    假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间 一个字符串列表就是一个由一些被 , 符号分开的子链组成的字符串如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算 如果str不在strlist 或strlist 为空字符串,则返回值为 0 如任意一个参数为NULL,则返回值为 NULL这个函数在第一个参数包含一个逗号(,)时将无法正常运行

    看不懂概念也没事,按下面类子:

    SELECT FIND_IN_SET('b', 'a,b,c,d');

    Copy

    结果为:2

    因为b 在strlist集合中放在2的位置 从1开始

    select FIND_IN_SET('1', '1'); 返回 就是1 这时候的strlist集合有点特殊 只有一个字符串 其实就是要求前一个字符串 一定要在后一个字符串集合中才返回大于0的数 

    select FIND_IN_SET('2', '1,2'); 返回2 

    select FIND_IN_SET('6', '1'); 返回0  strlist中不存在str,所以返回0

    测试表来说明find_in_set()和in的区别:

    CREATE TABLE `tb_test` (
    `id` int(8) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `list` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
    );
    INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
    INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
    INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');

    Copy

    原来以为mysql可以进行这样的查询(1):

    SELECT id,name,list from tb_test WHERE 'daodao' IN(list);

    Copy

    1809d852b11aa1fb73dd490b99b3c534.png实际上这样是不行的,这样只有当list字段的值等于'daodao'时(和IN前面的字符串完全匹配),查询才有效,否则都得不到结果,即使'daodao'真的在list中

    再来看看这个(2):

    SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao');

    Copy

    97adcf301084945754fd6e6ae4d3bf05.png这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果原因其实是(1)中 (list) list是变量, 

    而(2)中 ('libk', 'zyfon', 'daodao')是常量 所以如果要让(1)能正确工作,需要用find_in_set():

    SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list);

    Copy

    b9762fec37ad21b1968a2a2945766ef7.png

    总结:

    所以如果list是常量,则可以直接用IN, 否则要用find_in_set()函数

    也就是这两个sql是查询的效果是相同的:

    1、

    SELECT * from C_PURCHASINGMASTERDATA where FIND_IN_SET(EKGRP,'C54,C02,C14,C60,C06,C61,C53,C51,C12,C08,C03,C07')

    Copy

    2、

    SELECT * from C_PURCHASINGMASTERDATA where EKGRP in ('C54','C02','C14','C60','C06','C61','C53','C51','C12','C08','C03','C07')

    Copy

    但是如果第二句sql里面的值是传入sql的一个变量字段,那么第二句sql就不好使了要以实际情况决定用in还是用find_in_set()函数

    find_in_set()和like的区别:

    主要的区别就是like是广泛的模糊查询,而find_in_set()是精确匹配,并且字段值之间用,分开

    现在想查询拥有角色编号为2的用户,

    用like关键字查询:

    SELECT userid,username,userrole 角色 FROM `user` WHERE userrole LIKE '%2%';

    Copy

    结果:32d65b7b70586a35c6ad890bec8e5463.png

    用find_in_set()查询:

    SELECT userid,username,userrole 角色 FROM `user` WHERE find_in_set('2',userrole)

    Copy

    结果:2fb5540e5b924e66774b39f8399bc4b5.png

    显然用find_in_set()查询得到的结果才是我们想要的结果所以他俩的主要的区别就是like是广泛的模糊查询;

    而find_in_set()是精确匹配,并且字段值之间用,分开,Find_IN_SET查询的结果要小于like查询的结果

    展开全文
  • 1. ROW_NUMBER()函数•row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。•在使用row_number实现分页时需要特别注意一点:over子句的order by 要与Sql排序记录的order ...

    1. ROW_NUMBER()函数

    row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。在使用row_number实现分页时需要特别注意一点:over子句中的order by 要与Sql排序记录中的order by保持一致,否则得到的序号可能不是连续的。

    基本语法

    select ROW_NUMBER() over (partition  by...  order by...)  as ORDER_NUMfrom your_table t

    示例:

    -- 根据每个省进行分组并排序SELECT ROW_NUMBER() OVER (PARTITION BY SUBSTR(a.code,0,2) ORDER BY A.CODE ) AS ORDER_NUM,    A.CODE, A.NAMEFROM dcncy_china_area_code aWHERE A.IS_DEL = '0'ORDER BY A.CODE;

    c812c91c984d6bf447450ae1355a12e8.png

    2. RANK()函数

    rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。

    基本语法:

    select RANK() over (partition by... order by...) as ORDER_NUMfrom your_table t

    示例:

    SELECT RANK() OVER (PARTITION BY a.deptno ORDER BY a.sal DESC) AS order_num,    a.*FROM dcncy_emp a;

    1f06be44c1ccf6d35cd981a832f57e29.png

    3. DENSE_RANK()函数

    dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank是跳跃排序,有两个第一名时接下来就是第四名,dense_rank是连续排序,有两个第一名时仍然跟着第二名。

    基本语法:

    select DENSE_RANK() over (partition by...  order by...) as ORDER_NUMfrom your_table t

    示例:

    SELECT DENSE_RANK() OVER (PARTITION BY a.deptno ORDER BY a.sal DESC) AS order_num,    a.*FROM dcncy_emp a;

    3b52394377aab24e13828948f2a11ea4.png

    4. NTILE()函数

    ntile函数是要把查询得到的结果平均分为几组,如果不平均则分给第一组。ntile函数为各个记录在记录集中的排名计算比例,返回每条记录所在集合比例位置的值。

    基本语法:

    select NTILE() over (partition by... order by...) as ORDER_NUMfrom your_table t

    示例:

    SELECT NTILE(4) OVER (PARTITION BY a.deptno ORDER BY a.sal DESC) AS order_num,    a.*FROM dcncy_emp a;

    899076fd14b92bbc6ae80470bb283760.png

    展开全文
  • 今天我们就来分享是使用ArcGIS脚本工具将点数据进行排序并编号,文末我们会附上点...第三步:添加一个排序结果字段,将OBJECTID字段值赋给这个字段。第四步:创建脚本工具①首先创建工具箱②添加脚本③打开脚本...

    2bf80787da5fca8973353b78ca5c470b.png

    今天我们就来分享的是使用ArcGIS脚本工具将点数据进行排序并编号,文末我们会附上点数据和直接使用的脚本工具。

    5925132d78d4377e7e860caa949ebd9d.png

    我们先来看一下我们要达到的效果图

    f7cf3fc6ee2963c252f7b042ca3d4cb4.png

    详细步骤:

    第一步:打开点要素,在属性表中添加X和Y两个字段。

    e8dad3e6a9db842e007bf52c553b83f1.png

    第二步:使用sort工具,将X和Y字段作为排序字段,生成排序后的点数据。

    adab644343c2e3d6c3d603229dff8da8.png

    第三步:添加一个排序结果字段,将OBJECTID字段值赋给这个字段。

    6f5f29b52b99a44374a593fd8a5a1265.png

    第四步:创建脚本工具

    ①首先创建工具箱

    251b019085300da6eaaf9c13ddeb7081.png

    ②添加脚本

    1ddc8516bdd7b48b600edf3a1ef8f1e4.png

    ③打开脚本工具创建向导,填写信息

    34486c3bce506b740ce05bbf43972b92.png

    ④添加Python脚本,加载已经写好的Python文件(*.py格式)

    Python脚本的思路主要为

    首先规划好该工具需要多少个参数;

    # Script Tool Parameters
    InputFeature = arcpy.GetParameterAsText(0)
    Order = arcpy.GetParameterAsText(1)
    Sort_X = arcpy.GetParameterAsText(2)
    Sort_Y = arcpy.GetParameterAsText(3)
    OutputFeature = arcpy.GetParameterAsText(4)

    然后使用arcpy.CopyFeatures_management()将原数据复制一下;

    再使用arcpy.AddXY_management()将复制得到的数据添加XY两个字段,随后判断一下点排序的大体方向。

    这里要注意一下,由于编码问题,当代码有中文字符,需要使用.decode()方法解码中文,不然工具运行时会报错。

    if Order == '横向'.decode('UTF-8'):
    sortfield = [["POINT_Y", Sort_Y],["POINT_X", Sort_X] ]
    elif Order == '纵向'.decode('UTF-8'):
    sortfield = [["POINT_X", Sort_X],["POINT_Y", Sort_Y]]

    接着用arcpy.AddField_management()添加排序编号字段,使用arcpy.Sort_management(),生成排序后数据;

    最终使用工具arcpy.CalculateField_management(),将OBJECTID字段值赋给这个字段;

    python脚本完成!所有代码如下:

    import arcpy
    import time
    # Script Tool Parameters
    InputFeature = arcpy.GetParameterAsText(0)
    Order = arcpy.GetParameterAsText(1)
    Sort_X = arcpy.GetParameterAsText(2)
    Sort_Y = arcpy.GetParameterAsText(3)
    OutputFeature = arcpy.GetParameterAsText(4)
    tempfea = InputFeature+str(time.time()).split('.')[0][-5:-1]
    arcpy.CopyFeatures_management(InputFeature, tempfea)
    arcpy.AddXY_management(tempfea)
    if Order == '横向'.decode('UTF-8'):
    sortfield = [["POINT_Y", Sort_Y],["POINT_X", Sort_X] ]
    elif Order == '纵向'.decode('UTF-8'):
    sortfield = [["POINT_X", Sort_X],["POINT_Y", Sort_Y]]
    arcpy.Sort_management(tempfea,OutputFeature,sortfield)
    arcpy.AddField_management(OutputFeature,'order1','DOUBLE')
    arcpy.CalculateField_management(OutputFeature, 'order1','!OBJEC

    第五步:下一步,添加界面参数,这一步很重要,各个参数属性要逐个填入,分别如下,其中Order、Sort_X、Sort_Y属于list参数。

    91e552d31bd609c26b0e6a69b5128c25.png

    f26d89c54c2523aa1302716935fedbc8.png

    a52de0b3dadf2e6c1d55d8322e6b28ad.png

    设置完成后,点击finish,脚步工具创建完成!

    第六步:对上述的三个参数设置list列表

    ①点击脚本工具的属性

    75e46612a0204e7eef4350ff756e5d49.png

    ②切换至验证选项卡(Validation),点击Edit,编辑验证代码,添加如下3行代码

    self.params[1].filter.list = ['横向','纵向']
    self.params[2].filter.list = ["ASCENDING","DESCENDING"]
    self.params[3].filter.list = ["ASCENDING","DESCENDING"]
    

    144a1ecc33e6164c3022c40fe42ed9ac.png

    至此,ArcGIS的点排序编号脚本工具基本完成,为了方便别人使用,可以添加描述等辅助。

    ①打开工具描述

    9fceba60f99002683437ffa1ae17ffb3.png

    ②编辑工具信息

    39c2290eaf82a863804cb60e56a338fa.png

    体验一下该工具:

    37a3defe1025bd4e26eb9c604f18300b.png
    工具界面

    查看结果编号:

    4e0f59dc1d7f68d7b191b7c073efc344.png
    工具结果

    42a87d18dcf5b98eb89b1c2d66f616a4.png
    编号结果

    文件链接:https://pan.baidu.com/s/1CSwvph2Q5Cp46a-ICk6k4w

    提取码:2fkt

    展开全文
  • 集合提供了一个工具类:java.util.Collections 集合的工具类提供了若干静态方法,可以方便...但是如果要求根据集合中某个元素的值排序,该如何进行呢? 代码演示 public static void main(String[] args) { ...

    集合提供了一个工具类:java.util.Collections
    集合的工具类提供了若干静态方法,可以方便我们队集合做一系列操作,其中之一就是排序
    需要注意,提供的方法只能对List集合排序,因为Set集合不全是有序的。
    但是如果要求根据集合中某个元素的值排序,该如何进行呢?
    代码演示

    public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            list.add("abc");
            list.add("abcd");
            list.add("abcde");
            System.out.println(list);
            Collections.sort(list, new Comparator<String>(){
                public int compare(String o1, String o2) {
                    return o1.length()-o2.length();
                }});
            System.out.println(list);
        }

    此段代码将根据字符串长度从短到长排序。


    单独将此代码取出

    Collections.sort(list, new Comparator<String>(){
                public int compare(String o1, String o2) {
                    return o1.length()-o2.length();
                }});

    Collection提供了一个重载的sort方法,可以允许传入一个额外的比较器
    按照该比较器的规则对元素比较大小后进行排序。
    1.排序方式可以自定,更灵活
    2.不要求元素必须实现Comparable接口,没有侵入性


    更多例子:比如在对员工集合进行整理时,要对员工工资进行排序,也可以使用此方法
    只需将compare中参数,返回值进行修改即可。

    public int compare(Emp o1, Emp o2) {
                        return o1.getSalary()-o2.getSalary(); 
                    }

    根据工资升序排序。

    展开全文
  • Redis是一个高效内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型存储,在Redis通常根据数据key查询其value,Redis没有条件查询,在面对一些需要分页或排序的场景时(如评论,时间线)...
  • //查询班级信息 ...$list[$key]->class_list = DB::table('t_offline_class') ->whereIn('id', $classId) ->whereNull('deleted_at') ->orderByRaw(DB::raw("FIND_IN_SET(id, '" . im.
  • import java.util.Comparator; import java.util.List; public class Test { public static void main(String[] args) { List<... //根据TestDto对象priority字段降序排序 dtoList.sort(Co
  • 的某个值排序 List<Map<String, Object>> resList = new ArrayList<>(); // 添加初始数据。。。 // 排序操作,根据 time 字段排序 resList.sort((obj1, obj2) -> { String key1 = obj1....
  • 1. 根据集合对象的某个属性, 排序 List<RoomCartypeParamters> roomCartypeParamtersList = new ArrayList<>(); //进行排序, 按照指定字段升序排列 Collections.sort(roomCartypeParamtersList, ...
  • 个人记录 由于本人用的也不是很精通,所有做个记录,方便查阅 快速处理集合 | Java8 新特性 好用的 Stream ...以上新的coinList就是list中每个AllCoinEntity对象的coin字段的值 可参考: https://cloud....
  • List(Object)排序

    千次阅读 2019-02-26 11:20:25
    需求是根据一个对象的list中某个字段的值排序,比如根据列表中人的年龄排序: 在实体类中继承Comparable接口并重写compareTo()方法,方法里是自己需求比较的函数,可以根据自己的需求去写。   package ...
  • //根据map中的某个字段值 排序 Map<String,Object> map1 = new HashMap<>(); map1.put("SUM",333.123); map1.put("NAME","张1"); Map<String,Object> map2 = new HashMap<>(); ...
  • Java list排序---Collections.sort()

    千次阅读 2011-03-19 20:14:00
      最近需要用到对一个listlist存放的一个javabean,需要根据javabean某个字段进行对list排序)进行排序,开始想的方法是将list里面的javabean的那个需要排序字段的值存储到一个集合,然后将...
  • 找出list对象中某个字段重复的值对List对象集合某个字段进行排重根据list对象中的两个字段进行排序,字段有空的就放最后 List<String> list =orderList.stream(). collect(Collectors.groupingBy...
  • Java8新特性Stream流api实用一些封装

    热门讨论 2021-03-24 11:21:15
    字段排序字段排序排序测试从List中查找最大/最小值元素测试合并List中某个属性, 计算 总数/平均数测试List统计数据测试List转换为Map如何改变文本样式插入链接与图片如何插入一段漂亮代码片生成一个...
  • 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | FALSE 默认值: FALSE row_locking: 说明: 指定在表已更新或正在更新时是否获取行锁。如果设置为 ALWAYS, 只有在表被更新后才获取...
  •   场景一:需要根据List中Map的某个key-value进行排序。 //这里有一个list 方式一: List<Map<String,Object>> list; //假如Map中有个字段orderNum是排序号,也就是我们需要根据这个orderNum进行...
  • java常用工具类使用

    热门讨论 2012-03-19 20:11:37
    该类大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类另一个主要功能是,在数据库操作,它允许将毫秒表示为SQL DATE,是数据库操作java.sql.Date父类。关于数据库...
  • MYSQL中文手册

    2013-03-11 21:21:34
    3.6.4. 拥有某个字段的组间最大的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项...
  • 3.6.4. 拥有某个字段的组间最大的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2....
  • MySQL 5.1中文手冊

    2009-12-11 09:43:12
    3.6.4. 拥有某个字段的组间最大的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2....
  • 说明:可以根据视图text_length设定set long 大小 SQL>select text from user_views where view_name=upper('&view_name'); 6、同义词 查看同义词名称 SQL>select * from user_synonyms; 7、约束...
  • 3.6.4. 拥有某个字段的组间最大的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2....
  • mysql5.1中文手册

    2008-01-09 09:54:20
    拥有某个字段的组间最大的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发...
  • 4.1节正确的设置一个文本对象的值 4.2节. 将TextInput绑定一个值 4.3节. 创建一个具有文字提示的文本输入框 4.4节. 创建一个合适的编辑器 4.5节. 确定用户电脑上安装的所有字体 4.6节. 创建一个自定义的TextInput ...
  • 重置数据,清除指定行 row 或者 [row, ...] 或者整个表格的值 row?rows? clearActive 清除所有已激活的行或单元格为不可编辑状态 — hasActiveRow 判断当前是否已激活为编辑状态的行 row getActiveRow 获取...
  • 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58  5.11 我曾经使用过一个编译器,不使用NULL就不能编译。 58 5.12 我用预处理宏#define Nullptr(type)(type...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58  5.11 我曾经使用过一个编译器,不使用NULL就不能编译。 58 5.12 我用预处理宏#define Nullptr(type)(type...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

根据list中某个字段的值排序