SQL将满足条件的个数相加并与其他列进行比较

SQL sum the number of satisfied conditions and compare with other column

如果某个条件成立,我想检查三列。接下来,我想对这三个布尔值求和,并检查它们是否与第四列中的值相同。

SELECT SUM(CASE WHEN column1 LIKE 'D%' THEN 1 ELSE 0 END) AS bool1
       SUM(CASE WHEN column2 LIKE 'D%' THEN 1 ELSE 0 END) AS bool2
       SUM(CASE WHEN column3 LIKE 'D%' THEN 1 ELSE 0 END) AS bool3
FROM table
WHERE bool1 + bool2 + bool3 = column4

然而,这给出了一个错误。我应该如何更改查询?

聚合函数SUM()对一列的所有值进行操作,因此将其与另一列的特定值进行比较没有意义。

我怀疑你想要这样的东西:

SELECT *
FROM tablename
WHERE (column1 LIKE 'D%') + (column2 LIKE 'D%') + (column3 LIKE 'D%') = column4

每个布尔表达式 columnX LIKE 'D%' 对于 false 的计算结果为 0,对于 true 的计算结果为 1

如果列中有 nulls 更改为:

WHERE COALESCE(column1 LIKE 'D%', 0) + 
      COALESCE(column2 LIKE 'D%', 0) + 
      COALESCE(column3 LIKE 'D%', 0) = column4