【问题标题】:SQL count if (excluding some values)SQL count if(不包括某些值)
【发布时间】:2021-10-25 01:22:11
【问题描述】:

我正在尝试对我的数据库中的某些值进行计数。我想计算不包含某些值的数据。我正在这样做,但它似乎并不像那样工作。还有什么想法吗?

SELECT count(case when ABC NOT IN ('%A%', '%B%', '%C%', 
  '%D%', '%E%', '%F%', '%G%', '%H%') then 1 end) as '123'

谢谢,

【问题讨论】:

  • 您使用的是哪个数据库?
  • LIKE 通配符 % 不适用于 NOT IN。
  • 如果这些百分比应该是通配符,那么你不能使用'IN',你必须使用 LIKE 运算符,但你不能那样做,你必须说 ABC LIKE '%A %' OR ABC LIKE '%B% OR ...

标签: sql count


【解决方案1】:

如果你只有 ,那么使用 not in 和常量:

SELECT SUM(case when ABC NOT IN ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' then 1 else 0 end) as cnt

如果这些是LIKE 模式,那么您可以使用NOT LIKE

SELECT SUM(case when ABC not like '%A%' OR
                     ABC not like '%B%' OR
                     . . .
                then 1 else 0
            end) as cnt

注意:您的数据库可能具有简化此逻辑的正则表达式扩展。

【讨论】:

    【解决方案2】:

    你可以这样做:

    SELECT SUM(
      case when ABC like '%A%'
             or ABC like '%B%'
             or ABC like '%C%'
             or ABC like '%D%'
             or ABC like '%E%'
             or ABC like '%F%'
             or ABC like '%G%'
             or ABC like '%H%'
           then 0 else 1 end
      ) as '123'
    

    【讨论】:

    • SUM(),而不是 COUNT()。
    • @jarlh 好收获!谢谢。
    【解决方案3】:

    试试这个可以使用通配符(%)

    SELECT sum(
        case 
            when ABC NOT Like '%A%'
            and ABC NOT Like '%B%'
            and ABC NOT Like '%C%'
             and ABC NOT Like '%D%'
             and ABC NOT Like '%E%'
             then 1 
         end) as '123'
     from table;
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多