0

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

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 设置“巴黎”时,此方法有效,但当我为字段 213 设置巴黎时,此方法无效。

而且我什至不确定我是否可以以这种方式使用 COALESCE,我发现的所有示例都将 COALESCE 放在 SELECT 语句中。

然后是性能问题...

4

1 回答 1

2

您可以count (distinct)使用case

select 
    count(distinct case when value = 'Paris' then itemId end) cnt
from `tiki_tracker_item_fields`
where fieldId in (236,213);
于 2017-02-23T16:16:42.667 回答