2010-08-20 5 views
0

그래서,이 제목과 함께 오는의 MySQL : 쿼리가 다른 컬럼의 속성에 따라 데이터를 정렬하는

SELECT Date(p.born_at), SUM(p.value) as 'total_value_for_day' 
FROM puppies as p 
WHERE p.status = 2 
GROUP BY DATE(p.born_at); 

그래서, 이것은 2 열 결과를 제공 어렵다.

열 :

date | status = 1 | status = 2 | status = 3 
DATA!!! 

그렇게 할 수있는 방법이

내가 원하는이 무엇입니까?

+0

당신은 당신이 원하는 결과를 명확히 할 수 있습니까? 네 열, 첫 번째는 날짜, 다음 세 열은 일치하는 상태의 데이터를 원합니다. 따라서 status = 3 인 경우 해당 열의 데이터를 채 웁니다. 그 맞습니까? 작성된 데이터로 예제 출력을 주면 정말 질문을 명확히 할 수 있습니다. – dvanaria

답변

1
SELECT Date(p.born_at), 
SUM(case when status = 1 then p.value end) as 'status = 1', 
SUM(case when status = 2 then p.value end) as 'status = 2', 
SUM(case when status = 3 then p.value end) as 'status = 3' 
FROM puppies as p 
WHERE p.status in(1,2,3) 
GROUP BY DATE(p.born_at); 
+0

어디에서 사용하지 않거나 사용하지 않는 것이 더 낫습니까? – NullVoxPopuli

+0

데이터에 따라 다릅니다! 'WHERE'를 사용하면 상태가 1,2 또는 3이 아닌 경우 불필요한 행 처리를 피할 수 있습니다. 모든 행에 해당 값 중 하나가 있으면 중복 체크를 피하기 위해 제거하는 것이 가장 좋습니다 . –

1
SELECT Date(born_at), 
    SUM(case when Status = 1 then value else 0 end) as 'status = 1', 
    SUM(case when Status = 2 then value else 0 end) as 'status = 2', 
    SUM(case when Status = 3 then value else 0 end) as 'status = 3' 
FROM puppies 
GROUP BY DATE(born_at); 
+0

WHERE를 사용하거나 사용하지 않는 것이 더 낫습니다. – NullVoxPopuli

+0

가능한 상태가 4 개 이상인 경우 WHERE 절을 사용합니다. 귀하의 질문에 ... – RedFilter

+0

(마틴 이미 말했듯이 :) – RedFilter

1
SELECT 
    DATE(p.born_at) 
    , SUM(CASE WHEN STATUS = 1 THEN p.value END) AS 'Status = 1' 
    , SUM(CASE WHEN STATUS = 2 THEN p.value END) AS 'Status = 2' 
    , SUM(CASE WHEN STATUS = 3 THEN p.value END) AS 'Status = 3' 
FROM puppies AS p 
WHERE p.status IN(1, 2, 3) 
GROUP BY DATE(p.born_at); 
관련 문제