2017-05-07 1 views
0

주어진 무들 코스의 모든 게시물에 대해 학생이 입력 한 총 문자 수와 학생 당 총 게시물 수를 집계해야합니다. 한 번에 한 학생과 한 과정 만 보는 쿼리로 간단하게 시작했으며 포럼 메시지의 character_length로 새로운 열을 생성했습니다. 잘 작동하지만 열을 수동으로 집계해야하며 한 번에 한 학생과 코스에서만 작업합니다. 내 쿼리 :동일한 쿼리에서 계산 된 필드의 합계를 계산할 수 있습니까?

SELECT character_length(mdl_forum_posts.message) AS CHARS 
FROM mdl_forum_posts, mdl_forum_discussions 
WHERE mdl_forum_posts.userid = 1120 
AND mdl_forum_posts.discussion = mdl_forum_discussions.id 
AND mdl_forum_discussions.course = 181 

I 수 :

가) 더 나은()을 CHARS 열을 집계 단지 단일 쿼리 또는 B의 모든 게시물에 대한 총을 얻을는) 목록이 작업을 수행 학생/코스 조합 한 검색어?

모든 정보를 매우 높이 평가합니다. 이 테이블은 postgres입니다. 궁극적으로 다른 RDBMS에서도 작동 할 쿼리 빌더에서이 코드를 생성해야합니다. 빠른 회신

답변

0
SELECT character_length(string_agg(mdl_forum_posts.message)) AS CHARS 
FROM mdl_forum_posts, mdl_forum_discussions 
WHERE mdl_forum_posts.userid = 1120 
AND mdl_forum_posts.discussion = mdl_forum_discussions.id 
AND mdl_forum_discussions.course = 181 
GROUP BY mdl_forum_posts.message; 
+0

감사합니다! 나는 이것을 시험해 보았다. string_agg 함수에 최소한 공백 구분 기호를 추가 할 때까지 불평했다. 그런 다음 원래 쿼리에서와 같은 결과를 출력합니다. 어쩌면 내가 뭔가를 놓친거야? –

0
SELECT p.userid 
     ,d.course 
     ,SUM(character_length(p.message)) AS char_total 
     ,COUNT(p.message) AS post_count 
    FROM mdl_forum_posts p 
    JOIN mdl_forum_discussions d ON (d.id = p.discussion) 
    GROUP BY p.userid, d.course 
    ORDER BY p.userid, d.course 
    ; 
+0

이 코드 스 니펫은 환영하며 도움을 줄 수도 있지만, * how *가 질문에 대답하는 방법은 설명이 포함되어 있으면 크게 개선 될 것입니다 (// meta.stackexchange.com/q/114762). 그것이 없으면 당신의 대답은 교육 가치가 훨씬 낮아집니다 - 당신이 지금 묻는 사람이 아니라 미래의 독자들에게 질문에 답하고 있다는 것을 기억하십시오! 설명을 추가하려면 답을 편집하고 어떤 제한 및 가정이 적용되는지 표시하십시오. –

0
select 
    d.id, p.user_id, 
    count(*) as total_posts, 
    sum(character_length(p.message)) as chars 
from 
    mdl_forum_posts p 
    inner join 
    mdl_forum_discussions d on p.discussion = d.id 
group by rollup (d.id, p.user_id) 
관련 문제