2017-02-23 7 views
0

특정 값 (TikiWiki CMS, 추적 프로그램 응용 프로그램)에 해당하는 행을 셀 수 있도록 자체 조인하는 테이블에 요약을 작성합니다. 하지만 같은 값을 가질 수있는 두 개의 열이있는 경우가 있는데 SQL에서 특정 순서로 NULL이 아닌 첫 번째 값을 가져와야합니다. I 값으로 "파리"가 모든 라인을 카운트 할 쿼리MySQL은 WHERE 문에서 COALESCE 또는 IFNULL과 함께 NULL이 아닌 값을 선택합니다.

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

어느 필드 ID (236) 또는 필드 ID 213 : 여기

테이블 I 작동 tiki_tracker_item_fields의 일례이다. 여기 결과는해야한다 : 내 요청이 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)에 대한 '파리'가있을 때 작동합니다,하지만 난 필드 (21) 파리가있을 때 3.

그리고 나는 COALESCE를이 방법으로 사용할 수 있는지 확신하지 못합니다. 찾은 모든 예제는 SELECT 문에 COALESCE를 넣었습니다.

그런 다음

답변

2

당신은 casecount (distinct)을 사용할 수 있습니다 ... 성능 문제가 있습니다 :

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

좋아! 매력처럼 작동하고 빠릅니다. 감사! 이제는 예를 들어 '그 item item end'부분이 어떻게 작동하는지 이해하기 위해 내 마음을 감싸 줘야합니다. –

+0

또한 WHERE 문에서 제어 흐름 함수를 사용하는 것이 가능하거나 권장되는지 알고 싶습니다 ... –