2016-07-06 2 views
0

매년 성별로 그래프를 작성하고 그래프는 아래 이미지와 같습니다. enter image description here이전 행의 열 값 가져 오기 및 다음 행의 다음 열 추가

하지만 질의에 어려움을 겪고 있습니다.

쿼리

SELECT 
     year_added, 
     COUNT(case when gender='Male' then 1 end) as malecount, 
     COUNT(case when gender='Female' then 1 end) as femalecount, 
     COUNT(*) as totalcount 
    FROM tbl 
    WHERE status = 1 
    GROUP BY year_added 

결과

결과에서

enter image description here

는 2016 년 남성의 수가 4과 여성의 수가 2017 년 8, 난의 남성의 수를 원하는 2016을 2017 년 남성 수에 더하면 2017 남성 수는 5이고 여성 수와 총 수와 동일합니다. 결과가 어떻게 보이는지 아래 이미지를 제공했습니다. 그래프 작업을 계속 진행하는 방법을 알려주십시오. 아니면 이것을 달성 할 다른 방법이 있습니까? 당신이 MySql를 사용하는 경우

enter image description here

+0

이 사람들은 아마도 불멸의 존재일까요? – Strawberry

답변

2

을 기능의 공통 테이블 표현식의 종류를 달성 할 수있는이 시도 : MySQL의에서

SELECT 
    year_added, 
    @malecount_v := @malecount_v + malecount as malecount, 
    @femalecount_v := @femalecount_v + femalecount as femalecount, 
    @totalcount_v := @totalcount_v + totalcount as totalcount 
FROM (
    SELECT 
     year_added, 
     COUNT(case when gender='Male' then 1 end) as malecount, 
     COUNT(case when gender='Female' then 1 end) as femalecount, 
     COUNT(*) as totalcount 
    FROM tbl 
    WHERE status = 1 
    GROUP BY year_added 
    ORDER BY year_added 
) t1 
CROSS JOIN (SELECT @malecount_v := 0, @femalecount_v := 0, @totalcount_v := 0) t2 
+0

대단히 감사합니다! – dontknow

+1

이것은 나에게 꽤 똑바로 보지 않는다 – Strawberry

+0

@Strawberry 그래서 당신의 제안은 무엇입니까? – Blank

-1

당신은 단순히 CTE

처럼 뭔가를 당신이 임시 테이블을 사용하여 쿼리

SELECT 
     SUM(malecount) as 'malecount', 
     SUM(femalecount) as 'femalecount', 
     SUM(totalcount) as 'totalcount' 
    FROM TableCount 

다음

WITH TableCount AS 
(
    SELECT 
     year_added, 
     COUNT(case when gender='Male' then 1 end) as malecount, 
     COUNT(case when gender='Female' then 1 end) as femalecount, 
     COUNT(*) as totalcount 
    FROM tbl 
    WHERE status = 1 
    GROUP BY year_added 
) 

그리고 사용 후 사용할 수 있습니다

CREATE TEMPORARY TABLE IF NOT EXISTS TableCount AS (
SELECT 
      year_added, 
      COUNT(case when gender='Male' then 1 end) as malecount, 
      COUNT(case when gender='Female' then 1 end) as femalecount, 
      COUNT(*) as totalcount 
     FROM tbl 
     WHERE status = 1 
     GROUP BY year_added 
) 

그리고 당신은 테이블을 만들 때 임시 키워드를 사용하여 쿼리

SELECT 
     SUM(malecount) as 'malecount', 
     SUM(femalecount) as 'femalecount', 
     SUM(totalcount) as 'totalcount' 
    FROM TableCount 

이상 사용할 수 있습니다. A TEMPORARY 테이블은 현재 세션에서만 볼 수 있으며 세션이 닫히면 이 자동으로 삭제됩니다. 즉, 서로 다른 두 개의 세션이 이 서로 충돌하거나 동일한 이름이 아닌 의 기존 비 TEMPORARY 테이블과 충돌하지 않으면 동일한 임시 테이블 이름을 사용할 수 있습니다. 기존 테이블은 임시 테이블이 삭제 될 때까지 숨겨집니다. 임시 테이블을 만들려면 CREATE TEMPORARY TABLES 권한이 있어야합니다.

임시 테이블 개념을 사용하여 당신은 MySQL의

+0

나는 그가 누적 합계를 원한다고 생각한다. –

+1

문제가 명확하지 않습니다. –

+0

MySQL이 공통 테이블 식을 지원한다고 생각하지 않습니다. –

0

당신이 좋아, variables으로 작업을 수행 할 수 있습니다

SELECT 
    year_added, 
    (@iMalecount := (COUNT(CASE WHEN gender = 'Male' THEN 1 END) + @iMalecount)) AS malecount, 
    (@iFemalecount := (COUNT(CASE WHEN gender = 'Female' THEN 1 END) + @iFemalecount)) AS femalecount, 
    (@iTotalcount := (COUNT(gender) + @iTotalcount)) AS totalcount 
FROM tbl 
WHERE status = 1 
GROUP BY year_added 

하지만 요로 100 % u 문서를 읽을 수 있습니다.

다른 SQL 플레이 어는 아마도 저장 프로 시저가 필요합니다.

관련 문제