2013-08-20 3 views
0

테스트 목적으로 다음 코드를 고려하십시오 :은 SQLQuery 열은 하나의 대신에 가득하기 0의

CREATE TABLE Mydatabase(
    TableID_bi int, 
    EVENTS VARCHAR(200), 
    email VARCHAR(200), 
    Timedetail DATETIME 
); 

INSERT INTO `Mydatabase` (`TableID_bi`,`EVENTS`, `email`, `Timedetail`) VALUES 
    (1, 'first','[email protected]','2013-06-15'), 
(2, 'first','[email protected]', '2013-06-15'), 
(3, 'second','[email protected]', '2013-06-15'), 
(4, 'second','[email protected]', '2013-06-15'), 
(5, 'third','[email protected]', '2013-06-15'); 

내가 코드와 무슨 짓을했는지에 대한 간략한 설명 : 내가보기를 만든

두 번째, 세 번째 등 연결의 각각에 대해 다음과 같습니다 : 다음과 같습니다 (결과를 행보다는 현명한 결과로 표시하기 위해 모든 쿼리를 클럽에 적용하지 않은 것은 이유입니다.)

create view firstview as 
SELECT DATE(Timedetail) as Datefield1 , 
     count(Timedetail) as firstoccurances, 
     Events 
FROM Mydatabase 
WHERE Events = "first" GROUP BY Datefield1 ; 

마찬가지로 두 번째, 세 번째 및 기타 모든 이벤트가 발생합니다. 여기

내가보기에서 결과를 검색하는거야 방법입니다 언급 한 바와 같이

나는 같은 종류의 대형 데이터베이스에 일하고 있어요 : 데이터베이스에서 무슨 일이 일어나고 있는지에 대한

SELECT a.Datefield1 
     a.firstoccurances, 
     b.secondoccurances, 
     c.thirdoccurances 

FROM firstview a, 
     secondview b, 
     thirdview c 

WHERE a.Datefield1 = b.Datefield2 
AND a.Datefield1 = c.Datefield3 

간단한 설명 위. 예를 들어 다음과 같이 데이터베이스에서 날짜 범위를 선택했습니다. 2013-07-01에서 2013-08-01

지금까지 첫 번째 및 두 번째 이벤트에 관한 한 "첫 번째"및 "두 번째 이벤트 EVENTS 열 아래의 각 날짜에 대해 나열된 값입니다. I는 COUNT() 함수를 사용하여 시험하는 경우, 더 정확히 말하면, I는 다음과 같은 결과를 확인할 수

먼저 연결의 경우 :

TimeDetail | Number of first events 
2013-07-01    4 
2013-07-02    2 
2013-07-03    6 
and so on 

2013-08-01    5 

동일 번째 이벤트의 경우이다. 그러나 "세 번째"이벤트의 경우 동일하지 않습니다. 이벤트 열에 표시된 숫자가 인 이벤트 열 아래에 '세 번째'이벤트가 나열되어 있습니다 (예 : 2013-07-02 및 2013-07-03). 다음 출력 :

TimeDetail | Number of third events 
2013-07-01    0 
2013-07-02    1 
2013-07-03    2 
and so on 

2013-08-01    0 

그러나 위 출력이 표시되지 않습니다. 대신 2013-07-02 및 2013-07-03을 제외한 다른 모든 날짜 값은 '세 번째 숫자' 이벤트 열 아래에서 값 1로 채워집니다. 왜 그런지 알 겠어?

답변

1

내가 문제를 이해 척 할 수는 없지만이 해결책이 될 수 ...

SELECT timedetail 
    , SUM(CASE WHEN events = 'first' THEN 1 ELSE 0 END) first 
    , SUM(CASE WHEN events = 'second' THEN 1 ELSE 0 END) second 
    , SUM(CASE WHEN events = 'third' THEN 1 ELSE 0 END) third 
    FROM mydatabase 
GROUP 
    BY timedetail; 
+0

감사합니다. 여기서 SUM 대신 COUNT를 사용해야했습니다. 효과가 있습니다. :) – Tan

+0

아니요, 'sum'은 위 예의 올바른 연산자입니다. 'count'로 바꾸면 잘못된 결과가 나옵니다. http://sqlfiddle.com/#!2/f0006/1/0 및 http://sqlfiddle.com/#!2/f0006/2/0를 참조하십시오. – Leigh

+0

또한 게시 한 스키마가 잘 작동합니다 [example] (http://sqlfiddle.com/#!2/f0006/6/0). 그래서 당신이 게시 한 것과 다른 SQL을 사용했거나, 우리 환경에서 공유하고있는 다른 것이 있습니다 ;-) – Leigh