zoukankan      html  css  js  c++  java
  • 【日常总结】数据库查询遇到的问题:三目运算、sum的null值处理、多表联查

    1、MySql中的三元运算符有两种方法:

    case when 条件 then (条件为true时执行) else(条件为false时执行) end /*end不可少*/

    select *,if(expr1,expr2,expr3) from 表名

    问题描述:统计数据时,需要查询回复量>0的记录总数

    解决方案: IFNULL(SUM(IF(p.reply_count>0,'1','0')),0) replyCount

    2、问题描述:进行数据统计时,在sql中使用了SUM()函数,返回的结果集中有null值

    解决方案:利用IFNULL()函数判断SUM()函数查询的结果集是否为null,若果是null,将结果设置为某一固定值(比如0)

    参考:解决数据库查询时Null的问题(如SUM函数)

     1 #SUM(expr)函数如果表达式没有数据,那么返回的结果就会为空,下面介绍四种方法解决NUll问题:  
     2       
     3 #第一种: 采用 IFNULL(expr1,expr2)函数,当expr1为NULL时,则数据返回默认值expre2  
     4   
     5     SELECT IFNULL(SUM(expr),0) -- 表示若 SUM()函数结果返回为NULL泽返回0  
     6   
     7 #第二种: 采用从 COALESCE(value,...) 函数, COALESCE 函数作用是返回传入参数中第一个非空的值  
     8   
     9     SELECT COALESCE(SUM(expr),0)   
    10   
    11 #第三种: 采用 case WHEN THEN WHEN THEN .. ELSE END 函数,注意 CASE WHEN 函数最后是以 END 结尾  
    12   
    13     SELECT CASE WHEN ISNULL(SUM(expr)) THEN 0 ELSE SUM(expr) END  
    14   
    15 #第四种: 在结果集中进行处理  
    16       
    17     #比如在Java在进行数据库交互查询之后,处理 SUM(expr) 的结果集,返回为null,进行==判断即可:  
    18     #if(result == null){result=0} return result;  
    19     #or if(result instanceof Integer){return result}else{return 0;}  

    附:SUM()与COUNT()的区别:

    • SUM是对符合条件的记录的数值列求和
    • COUNT 是对查询中符合条件的结果(或记录)的个数

      SQL中AVG、COUNT、SUM、MAX等聚合函数对NULL值的处理:

    • AVG忽略NULL值,而不是将其作为“0”参与计算
    • COUNT(*)对表中行数进行计数不管是否有NULL,COUNT(字段名)对特定列有数据的行进行计数忽略NULL值
    • MAX()、MIN()求最大、最小值都忽略NULL
    • 可以对单个列求和,也可以对多个列运算后求和忽略NULL值,且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。

    3、问题描述:从部门表(org)查询部门人数大于3人(employee)的所有部门的信息

    解决方案:

    SELECT o.* FROM org o WHERE STATUS=1 AND o.id IN (

      SELECT temp.oid FROM (

        SELECT COUNT(*) custNum,e.org_id oid FROM employee e WHERE e.state=1 GROUP BY oid HAVING custNum>0

      ) AS temp

    )

  • 相关阅读:
    重构之重新组织函数(Split Temporary Variable)
    HammperSpoon 不能 Focus Google Chrome 的问题
    如何让 vim 可以在命令行执行命令并且附加参数
    This bison version is not supported for regeneration of the Zend/PHP parsers
    php cURL library is not loaded
    aws linuxbrew GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2
    gen-cpp/.deps/ChildService.Plo: No such file or directory
    快速解码base64和utf-8的ASCII编码和URL解码
    英文版firefox显示中文字体丑的问题
    linux find 反转 查找没有被找到的结果
  • 原文地址:https://www.cnblogs.com/NoctisYang/p/9016119.html
Copyright © 2011-2022 走看看