MySQL select WHERE 语句中带有 COALESCE 或 IFNULL 的非 NULL 值

MySQL select non-NULL values with COALESCE or IFNULL in a WHERE statement

我正在 table 中构建一个摘要,我自己加入该摘要以计算某些值对应的行(在 TikiWiki CMS 中,跟踪器应用程序)。但是我有一个情况,其中有两个列可以具有相同的值,我需要 SQL 以特定顺序获取第一个非 NULL 值。

这是我工作的 table tiki_tracker_item_fields 的示例:

 itemId  | fieldId  | value   
==========================
41       | 236      | Paris   
41       | 213      | Paris  
14       | 236      |         
14       | 213      | Paris  
25       | 236      | Paris     
25       | 213      |       

在查询中,我想计算字段 ID 236 或字段 ID 213 中具有 "Paris" 作为值的所有行。这里的结果应该是:3.

有我的要求:

 SELECT COUNT(*) AS sp_actions           
FROM                                    
  `tiki_tracker_item_fields` AS actions 
WHERE                                   
  COALESCE(                             
    actions.fieldId = 236,              
    actions.fieldId = 213               
  )                                     
AND actions.value = 'Paris'                  

因此,当我对字段 236 使用 'Paris' 时,此方法有效,但当我对字段 213 使用巴黎时,此方法无效。

而且我什至不确定我是否可以这样使用 COALESCE,我找到的所有示例都将 COALESCE 放在 SELECT 语句中。

然后是性能问题...

您可以将 count (distinct)case 一起使用:

select 
    count(distinct case when value = 'Paris' then itemId end) cnt
from `tiki_tracker_item_fields`
where fieldId in (236,213);