2013-02-07 3 views
0

다음 SQL 문은 아래 나열된 결과를 생성합니다. 질문입니다.이 문을 수정하여 각 post_id의 총계를 제공하려면 어떻게해야합니까? 예를 들어, 1 =해야 = 25 POST_ID, 2 정상적으로 POST_ID 758SQL : SUM 반환 된 결과의 MAX 값의 합

SELECT t.post_id, 
SUM(maxpostmetric) as sumvalue 
    FROM ( 
    SELECT post_metrics.post_id, 
    post_metrics.post_metric_type_id, 
    MAX(post_metrics.value) maxpostmetric 
    FROM post_metrics 
    INNER JOIN posts ON posts.id = post_metrics.post_id 
    WHERE posts.channel_id = 2268 
    GROUP BY post_metrics.post_id, post_metrics.post_metric_type_id 
    ORDER BY post_metrics.id 
)t 
INNER JOIN post_metric_types ON post_metric_types.id = t.post_metric_type_id 
GROUP BY t.post_id, t.post_metric_type_id 
post_id를

: 값; 1 : 0; 1:25; 1 : 0; 2 : 110; 2 : 588; 2:60;

1 = 25; 2 = 758

감사

당신은뿐만 아니라 post_metric_type_id에 의해 그룹화하고 있습니다 때문입니다
+0

, 적절한 형식 코드에 대한 네 개의 공백으로 들여 쓰기를한다. – tadman

답변

0

. 해당 필드에 대한 조인 및 그룹화의 목적은 무엇입니까? 결과에 해당 필드가 포함되게하려면 select 문에 결과를 추가하십시오.

그러나 post_id의 SUM을 얻으려면 GROUP BY 절에서이를 제거해야합니다.

SELECT t.post_id, 
     SUM(maxpostmetric) as sumvalue 
    FROM ( 
    SELECT post_metrics.post_id, 
    post_metrics.post_metric_type_id, 
    MAX(post_metrics.value) maxpostmetric 
    FROM post_metrics 
    INNER JOIN posts ON posts.id = post_metrics.post_id 
    WHERE posts.channel_id = 2268 
    GROUP BY post_metrics.post_id, post_metrics.post_metric_type_id 
    ORDER BY post_metrics.id 
)t 
INNER JOIN post_metric_types ON post_metric_types.id = t.post_metric_type_id 
GROUP BY t.post_id 

필요에 따라 내부 결합도 제거 할 수 있습니다.

행운을 빈다.

+0

감사합니다 sgeddes! – Jim

2

당신은 두 번 집계 할 필요가 없습니다 : 참고로

SELECT post_metrics.post_id, MAX(post_metrics.value) maxpostmetric 
FROM post_metrics INNER JOIN 
    posts 
    ON posts.id = post_metrics.post_id 
WHERE posts.channel_id = 2268 
GROUP BY post_metrics.post_id 
ORDER BY post_metrics.id 
+0

+1 - 내부 검색어 인 GROUP BY 만 보지는 않았습니다. 잘 했어. – sgeddes