COUNT(*) 查询在 MYSQL 中在 null 情况下返回 0

Posted

技术标签:

【中文标题】COUNT(*) 查询在 MYSQL 中在 null 情况下返回 0【英文标题】:COUNT(*) query In MYSQL return 0 in null cases 【发布时间】:2021-12-28 09:57:30 【问题描述】:

解决方法也可以通过mysql,如果在Laravel php中无法获取,也可以通过subSelect来解决

我正在通过 LARAVEL PHP 进行编程,但在以下查询中遇到了困难:

$R = collect(\DB::connection('mysql_scipg')
        ->table('producao_email')
        ->selectRaw('dominio,count(*) as qtdR')
        ->where('cod_cliente', $cliente_id)
        ->where('lote',$lote)
        ->where('cod_status','R')
        ->whereIn('dominio',$dominiosL)
        ->groupBy('dominio')
        ->get());
$dominio:
array:10 [ 0 => "gmail.com" 1 => "hotmail.com" 2 => "outlook.com" 3 => "bol.com.br" 4 => "live.com" 5 => "terra.com.br" 6 => "icloud.com" 7 => "ig.com.br" 8 => "hotmail.com.br" 9 => "msn.com" ]

我得到的结果:

  #items: array:4 [
    0 => #54260
      +"dominio": "bol.com.br"
      +"qtdR": 2
    
    1 => #54261
      +"dominio": "gmail.com"
      +"qtdR": 526
    
    2 => #54262
      +"dominio": "hotmail.com"
      +"qtdR": 274
    
    3 => #54263
      +"dominio": "terra.com.br"
      +"qtdR": 1
    
  ]

我想在没有有效计数的情况下获得值 0;

我想得到的结果:

Collection #54236
  #items: array:4 [
    0 => #54260
      +"dominio": "gmail.com"
      +"qtdR": 526
    
    1 => #54261
      +"dominio": "hotmail.com"
      +"qtdR": 274
    
    2 => #54262
      +"dominio": "outlook.com"
      +"qtdR": 0
    
    3 => #54263
      +"dominio": "bol.com.br"
      +"qtdR": 2
    
    4 => #54264
      +"dominio": "live.com"
      +"qtdR": 0
    
    5 => #54265
      +"dominio": "terra.com.br"
      +"qtdR": 1
    
  ]

所以一直到数组的末尾,如上例,但我直到最后一个域才做,我认为可以理解预期的结果。

我用:

        ->table('producao_email')
        ->selectRaw('dominio,IFNULL(count(*),0) as qtdR')
        ->where('cod_cliente', $cliente_id)
        ->where('lote',$lote)
        ->where('cod_status','R')
        ->whereIn('dominio',$dominiosL)
        ->groupBy('dominio')
        ->get();

结果:

  #items: array:4 [
    0 => #54260
      +"dominio": "bol.com.br"
      +"qtdR": 2
    
    1 => #54261
      +"dominio": "gmail.com"
      +"qtdR": 526
    
    2 => #54262
      +"dominio": "hotmail.com"
      +"qtdR": 274
    
    3 => #54263
      +"dominio": "terra.com.br"
      +"qtdR": 1
    
  ]

【问题讨论】:

【参考方案1】:

我不知道你为什么要收集结果,而它已经是一个集合,但是,你可以使用IfNull mysql 表达式:

$values=\DB::connection('mysql_scipg')
        ->table('producao_email')
        ->selectRaw('dominio,IFNULL(count(*),0) as qtdR')
        ->where('cod_cliente', $cliente_id)
        ->where('lote',$lote)
        ->where('cod_status','R')
        ->whereIn('dominio',$dominiosL)
        ->groupBy('dominio')
        ->get();

【讨论】:

以上是关于COUNT(*) 查询在 MYSQL 中在 null 情况下返回 0的主要内容,如果未能解决你的问题,请参考以下文章

mysql 带条件的sum/count 使用技巧

mysql 带条件的sum/count 使用技巧

mysql查询一次在单个查询中在多个表中插入记录

在 mysql 中在哪里设置 IN 条件(父表或子表)

mybatis返回一个count加一个字段该怎么设置返回resultType

mybatis返回一个count加一个字段该怎么设置返回resultType