精华内容
下载资源
问答
  • decode排序
    2015-11-10 15:06:21

    myfun() return number;
    
    
    select *from table order by decode(myFun(),-1,null,myFun()) 

    执行发现排序结果不一致,查找后发现这时候decode的结果返回数据为字符型(原因未知)

    外层套用to_number()解决

    select *from table order by to_number(decode(myFun(),-1,null,myFun()))


    更多相关内容
  • Oracle中使用decode进行特定排序

    使用场景:在查询数据时,需要按照特定的字符顺序进行排序,而不是简单的order by排序

    解决:使用decode,  decode(字段名,排序1的值,1,排序2的值,2,排序3的值,3......)

    SELECT *
    FROM TABLE_CITY
    ORDER BY DECODE(CITY_NAME,
                     'jinan',
                     1,
                     'qingdao',
                     2,
                     'zibo',
                     3,
                     'zaozhuang',
                     4,
                     'dongying',
                     5,
                     'yantai',
                     6,
                     'weifang',
                     7,
                     'jining',
                     8,
                     'taian',
                     9,
                     'weihai',
                     10,
                     'rizhao',
                     11,
                     'laiwu',
                     12,
                     'linyi',
                     13,
                     'dezhou',
                     14,
                     'liaocheng',
                     15,
                     'binzhou',
                     16,
                     'heze',
                     17)

    展开全文
  • 一、decode 函数(1)用法:decode(colName,search1,result1,search2,result2.....,[default])(2)逻辑:检索colName的值,如果是search1结果就是result1,同理往后....否则使用default,没有default时,返回的是null--...

    一、decode 函数

    (1)用法:decode(colName,search1,result1,search2,result2.....,[default])

    (2)逻辑:检索colName的值,如果是search1结果就是result1,同理往后....否则使用default,没有default时,返回的是null

    --练习:年终发奖金,职位'MANAGER'发放月薪的1.2倍,职位'SALESMAN'发放月薪的1.1倍,

    -- 职位'CLERK'发放月薪的1.05倍,其他职位发放月薪作为奖金,查询员工的姓名,职位,年终奖。

    select ename,job,sal,decode(job,'MANAGER',sal*1.2,'SALESMAN',sal*1.1,'CLERK',sal*1.05,sal) 年终奖 from emp;

    (3)decode与group by连用

    --练习: 职位'MANAGER','SALESMAN'是VIP,'CLERK'SVIP,其他 IP

    select ename,job,decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP') from emp;

    --练习:查询这三种级别的人数

    select job,decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP') 级别,count(*) 级别人数

    from emp group by job;

    or

    select decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP'),count(*) 级别人数

    from emp group by decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP');

    (4)decode与order by连用

    --练习:部门中有4个部门'ACCOUNTING','RESEARCH','SALES','OPERATIONS'

    --练习:按照部门名称排序,查询部门信息

    select * from dept order by dname desc;

    --练习:排序规则'ACCOUNTING','SALES','RESEARCH','OPERATIONS'依次排序

    select deptno,dname,loc,decode(dname,'ACCOUNTING',1,'SALES',2,'RESEARCH',3,'OPERATIONS',4)

    from dept order by decode(dname,'ACCOUNTING',1,'SALES',2,'RESEARCH',3,'OPERATIONS',4);

    二、case

    与decode函数功能一样的:

    --格式:case colName when search1 then result1

    --                  when search2 then result2

    --                    .......

    --                  else result0 end

    --练习:

    select ename,job,sal,case job when 'MANAGER' then sal*1.2

    when 'SALESMAN' then sal*1.1

    when 'CLERK' then sal*1.05

    else sal end 年终奖 from emp;

    三、排序函数:(写在select子句中)

    举例:假设现在又三名同学成绩排序,各个函数的排序规则如下:

    1: row_number() over(partition by colName1 order by colName2); 连续不重复   第一名 第二名 第三名

    2: rank() over(partition by colName1 order by colName2);               重复不连续   第一名 第一名 第三名

    3: rank_dense()  over(partition by colName1 order by colName2);  连续重复     第一名 第一名 第二名

    排序函数可以直接进行区间查询

    partition by colName1:表示按照colName1分组(可以省略)

    order by colName2:表示按照colName2排序

    --练习:查询所有员工信息,按照月薪排序

    select e.*,row_number() over(order by sal) rn from emp e;

    select e.*,rank() over(order by sal) rn from emp e;

    select e.*,rank_dense() over(order by sal) rn from emp e;

    --练习:查看每个部门的员工信息,按照月薪排名

    select e.*,row_number() over(partition by deptno order by sal) rn from emp e;

    select e.*,rank() over(partition by deptno order by sal) rn from emp e;

    select e.*,rank_dense() over(partition by deptno order by sal) rn from emp e;

    --练习:区间查询

    select * from (select e.*,row_number() over(order by sal) rn from emp e)

    where rn between 1 and 3;

    四、高级分组函数

    rollup(p1,p2,p3)

    参数n个,共分n+1种情况,先按照所有参数分组 先按所有参数分一种情况,然后往后一次少一个参数进行分组

    --练习:先按照p1,p2,p3分组,再按照p1,p2分组,再按p1分组,最后整张表为一组

    select year_id,month_id,day_id,sum(sales_value) from salestable group by rollup(year_id,month_id,day_id);

    cube(p1,p2,p3)

    参数有n个,组合有2^n种,p1,p2,p3,p1p2,p1p3,p2p3,p1p2p3,null中;

    select year_id,month_id,day_id,sum(sales_value) from salestable group by cube(year_id,month_id,day_id);

    grouping sets(p1,p2,p3)

    n个参数,组合有n个,每个参数为一种情况,可以自定义分组

    --练习:统计每年,月,日的销售额

    select year_id,month_id,day_id,sum(sales_value) from salestable

    group by grouping sets(year_id,(year_id,month_id),(year_id,month_th,day_id));

    --上述例子有45种,3+12+30

    --练习:统计每年,每月,每日

    select year_id,month_id,day_id,sum(sales_value) from salestable

    group by grouping sets(year_id,month_id,day_id);

    展开全文
  • 1 问题对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序。但排序规则是默认的,数字、时间、字符串等都有自己默认的排序规则。有时候需要按自己的想法来排序,而不是按字段默认...

    1 问题

    对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序。但排序规则是默认的,数字、时间、字符串等都有自己默认的排序规则。有时候需要按自己的想法来排序,而不是按字段默认排序规则。

    比如字段值为英文字段:Monday、Tuesday、Wednesday等,如果按字段默认排序规则就为:

    Friday

    Monday

    Saturday

    Sunday

    Thursday

    Tuesday

    Wednesday

    实际我需要的是:

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    Sunday

    2 decode函数

    通过decode函数可以实现,如下:

    select * from table_date

    order by

    decode(DateStr,

    'Monday',1

    'Tuesday',2

    'Wednesday',3

    'Thursday',4

    'Friday',5

    'Saturday',6

    'Sunday',7,

    0);

    后面的数字可以不连续。

    3 case when语句

    另外,还可以用case when来实现:

    select * from table_date

    order by (CASE DateStr

    WHEN 'Monday' then 1

    WHEN 'Tuesday' then 2

    WHEN 'Wednesday' then 3

    WHEN 'Thursday' then 4

    WHEN 'Friday' then 5

    WHEN 'Saturday' then 6

    WHEN 'Sunday' then 7

    ELSE 0

    END);

    4 总结

    当然,把字段直接赋值为对应的数字效率会高很多,通过另外一张表再建立映射关系。

    欢迎关注微信公众号,将持续为你更新...

    多读书,多分享;多写作,多整理。

    展开全文
  • json_decode 索引为数字时自动排序问题解决方法索引为数字时自动排序问题解决方法主要介绍了使用son_encode 给前端返回数据,结果顺序不对,经debug调试,发现是json_encode 函数的问题,变成 " " + 数字即可,需要的...
  • json_decode 索引为数字时自动排序问题解决方法.docx
  • 场景 01 (IN 语句 排序 decode() 函数): 1,我们在查询中会经常使用这样的用法, select * from table_name t where t.id in (1, 3, 7, 9),这是一条查询表中 id 为 1, 3, 7, 9 的数据现在我们加上一个需求,...
  • decode对字符列进行特定的排序

    千次阅读 2018-03-12 14:25:25
    select decode(count(*),0,'F','T') isEx from bborder by对字符列进行特定的排序大家还可以在Order by中使用Decode。例:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以...
  • oracle的order by decode根据文字自定义排序的例子: order by decode(t.title, '当前生效预警', 1, '今日即将生效', 2, '明日预计生效', 3,...
  • Oracle中decode函数详解

    千次阅读 2022-02-27 11:17:20
    Oracle中decode函数详解,对decode的函数格式、函数说明、使用场景进行详细讲解。
  • json_encode 索引为数字,自动排序问题 使用son_encode 给前端返回数据,结果顺序不对,经debug调试,发现是json_encode 函数的问题; { "code": 0, "msg": "请求成功!", "...
  • decode函数索引的问题

    2021-05-05 01:16:00
    create index sex_ind on test_sex (decode(sex,'m','man','w','women'));索引已创建。已用时间:00: 00: 00.06SQL> select /*+ index(test_sex sex_ind) */ decode(sex,'m','man','w','women') from test_sex ...
  • XLJoracle提供了非常多的函数运算,有的时候使用这些函数可以大大减少sql语句的复杂度,并且减少表的扫描,下面可以看一个利用decode函数进行语句优化的案列:SELECT 1 AS CLIENT_SEQ,1 AS ZQ,NVL(A.OBJ_AREA, '...
  • 现有 条目-类型 ITEM表 如下: ...现在想要根据自定义TYPE顺序(质量 - 时间 - 数量)对ITEM表的数据进行排序: SELECT * FROM ITEM ORDER BY DECODE (TYPE, '质量', 1, '时间', 2, '数量', 3) 结果为: ...
  • DECODE进行排序

    2015-03-18 17:40:00
    DECODE用法: 现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other; ...
  • 需求: mybatis传入参数进行in操作查询,并按照...order by decode(排序列, <foreach item="A" index="index" collection="datalist" separator=","> #{A},#{index} </foreach> ) 实际代码 order b
  • order by decode([字段名],字段值1,‘替换值1’,字段值2,‘替换值2’,字段值3,‘替换值3’,) 即如果字段值符合【字段值1】,则替换为【替换值1】以此类推 举例:根据职务指定排序 select * from ioc_rcsdb.a_zb_zwfw...
  • order by排序的用法

    万次阅读 多人点赞 2018-09-21 05:43:40
    默认升序排序,blogid = 3时返回1,其他则返回2, 所以blogid = 3的记录排在最前,所以不管怎样,BLOGID为3的值必须排在第一位,其他的记录按照BLOGID升序排序。                
  • 【Oracle】day04_子查询_分页查询_DECODE_排序_集合操作_高级分组 1.子查询 子查询的作用是为其他SQL语句提供数据,以便其他SQL可以根据该数据进行操作. 子查询可以嵌套在DQL,DML,DDL中使用 最常见的地方是在DQL...
  • Oracle decode函数实现杂乱数据排序

    千次阅读 2018-01-26 19:13:46
    需求有时我们从数据库中...我们需要对现有的数据进行排序实现对现有的数据进行排序,使用到了Oracle的decode()函数decode()函数decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)该函数的含义如下:IF 条件=
  • 今天在做项目的时候,在使用JPA对订单进行按时间排序的时候发现查分页数据的时候有点问题。我先一页设置一条数据,然后发现第一页和第二页的数据居然一样。下面给出我BaseDao中的JPA分页方法: @Override public...
  • arraysort 对一维数组进行排序 decto 将十进制数字转成其它进制字符串 getsep 得到指定符号分隔开的文本数组 hexdecode 将16进制字符串以指定字符集进行解码成字符 hexencode 将字符串指定字符集进行编码成16进制...
  • select DECODE(C.ID,‘3926dc5252c74252aa52535508bec475’,1 ,‘4f250de78d4c4655a4a704a3b9fc48ab’,2,‘59816b9cc23644639e94edc941564ebc’,3) AS SX , C.* FROM 表名 C WHERE ID IN(‘59816b9cc23644639e94edc...
  • 数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序(这里看个人需求)。 普通的sql...
  • 在Oracle查询中,如果在没有排序,但又想让某列中特定值的信息排到前面的时候,使用oracle的decode(字段,’字段值’,数字) 如 select name from user 查询出来的所有数据,如果想让 name=’张三’ 结果排到前面,则...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,062
精华内容 18,024
关键字:

decode排序