2017-10-08 1 views
0

위해 예와 아니오 분기 :SQL 쿼리 - 나는 다음 표했다

id|overtime| date 
--+--------+----------- 
1 | yes | 2017-03-10 
2 | no  | 2017-07-16 
3 | yes | 2017-01-22 
4 | no  | 2017-07-14 

가 지금은 분기하여 yes들과 no의 주문을 합계를 (Q1, Q2, Q3, Q4) :

yes| no| quarter 
---+---+--------------- 
13 | 4| Q1 
2 | 5| Q2 
8 | 14| Q3 
12 | 12| Q4 

내 솔루션 :

SELECT 
    (select count(*) As sum_yes from dashboard where overtime = 'Yes') as yes, 
    (select count(*) As sum_no from dashboard where overtime = 'No') as no, 
    (SELECT quarter(date) as quarter from dashboard) 
group by quarter 

나는 그것이 작동하지 않는다는 것을 알고있다. 도움을받을 수있어서 기쁩니다.

답변

1

사용 조건 집합이 올해 포함

select year(date) as yyyy, quarter(date) as q, 
     sum(overtime = 'Yes') as yes, 
     sum(overtime = 'No') as no 
from dashboard 
group by yyyy, q; 

참고. 나는 "분기"를 1 년씩 구별하는 것으로 해석합니다. 여러 해 동안의 데이터를 결합하려면 해당 구성 요소를 제거하십시오.

MySQL은 부울을 숫자 컨텍스트에서 정수로 취급합니다. 참이면 "1"을, 거짓이면 "0"으로 처리합니다.

1

그래서 당신은 분기 당 하나 개의 행을 원하는 ...

... 
FROM dashboard 
GROUP BY quarter(date); 

그런 다음 당신이 그 행의 수를 하나의 열을 얻을 할 위치 overtime = 'Yes' : 대한

SELECT 
    COUNT(CASE WHEN overtime = 'Yes' THEN 1 END) as yes, 
    ... 

그리고 하나 더 아니요

... 
    COUNT(CASE WHEN overtime = 'No' THEN 1 END) as yes, 
    ... 

그게 전부입니다. case 표현식은 일치하는 행을 1로 맵핑하지만 비 맵핑 행은 null (함축 된 else null 절로 인해)으로 맵핑합니다.

쿼터 열을 추가하기 만하면됩니다. 이 기술에 대한

더 : http://modern-sql.com/use-case/pivot

+0

당신에게 마르쿠스 감사합니다! 잘 작동합니다! 내 검색어는 다음과 같습니다. 숫자가 인 경우 COUNT (초과 근무 = '예', 그 다음 1 끝) 초과 인 경우 (초과 근무 = '아니요'1이 끝날 때), Neuch, 분기 (날짜)를 Quartal FROM 대시 보드 Quartal by GROUP – Ck2513

관련 문제