• sql学习笔记(乘除法、查询结果分别显示即case和union函数用法)


    sql乘除法:

    SELECT
    c.description AS crewname ,
    wo.worktype AS worktype ,
    conn.con AS con,
    conwc.conw AS conwc,
    cast(ROUND(COALESCE(cast(conwc.conw as decimal(12,2)),2)/conn.con*100,0) as decimal(12,2)) as q,
    qx.qxnum AS qxnum ,
    qxd.dqxnum AS dqxnum,
    wo.siteid AS siteid,
    to_char(wo.SCHEDSTART,'YYYY-MM-DD') AS SCHEDSTAR,
    g.description AS sitename
    FROM

    1)如果是int之类的数据做计算,先转成decimal或者double类型,这样在计算结果为小数0点多的时候就不会只是显示0了
    2)cast就是类型转换函数
    3)round就不用多说了吧
    4)COALESCE函数是当数据为null的时候的处理函数,比如a的数据为null,则:
    coalesce(a,0) -------- 当a为null时候设置其为0
    coalesce(a,1) -------- 当a为null时候设置其为1


    5)to_char可以说是截取的函数,也可以说是时间的格式化函数

    sql查询结果分别显示(即case和union函数的用法):

    select crewid ,count(1) as con from workorder where worktype='PMDXJ' group by crewid;

    select crewid ,count(1) as conw from workorder where worktype='PMDXJ' and status='完成' group by crewid;

    第一句sql是查询计划任务工单数,即所有工单数

    第二句sql是查询已完成的工单数

    需求:合并上面两个sql的查询结果,使之在一个查询结果中分别显示

    方法一:

    select crewid,count(wonum) as conw,1 as mytype from workorder where worktype='PMDXJ' group by crewid
    union all
    select crewid,count(wonum) as conw,2 as mytype from workorder where worktype='PMDXJ' and status='完成' group by crewid;

    此查询的结果中mytype为1的是计划任务工单数,mytype为2的是完成的工单数

    方法二:

    select crewid,sum(case when status ='完成' then 1 else 0 end) wc ,count(1) jh from workorder where worktype='PMDXJ' group by crewid;

    此查询需要注意的是对完成工单的数量统计不能用count函数,因为只要出现的记录都会被count函数统计到,不管你是1还是0,所以此处通过合计标识为1的和来达到统计完成的工单的数量

  • 相关阅读:
    一. web框架-----------ES6语法和VUE介绍(一)
    十.Django---framework框架 响应器(渲染器)
    【hiho1087】Hamiltonian Cycle
    【CF160E】Buses and People
    【51nod1672】区间交
    【洛谷P2915】Mixed Up Cows
    【模板】长链剖分
    【洛谷P4552】IncDec Sequence
    【CF1181C】Flag
    【CF1181D】Irrigation
  • 原文地址:https://www.cnblogs.com/binTke170120/p/6364986.html
Copyright © 2020-2023  润新知