2011-10-15 3 views
0

첫 번째 열은 Unix 시간 형식의 날짜이고 두 번째 열은 각 테이블마다 다른 형식의 일부 데이터 인 일련의 MySQL 테이블이 있습니다. 나는 그룹이 하나의 월별 데이터와 유사한 쿼리를 사용하고더 많은 테이블에서 MySQL 조인/유니온 결과를 얻었습니다.

:

SELECT YEAR(FROM_UNIXTIME(date)) AS year, MONTH(FROM_UNIXTIME(date)) AS month, SUM(views) AS views, 
FROM stats 
GROUP BY year, month 
나는이 모든 "두 번째"열 한 줄에 출력 할 수 올해 groupd 할 필요가 쿼리의 어떤 종류의

그리고 달? 즉, 반환 된 각 행에 "year, month, views, column2, column3"이 포함되도록 ...

"UNION을 사용하여 시도했지만"두 번째 열이 모두 다르기 때문에 각 테이블에 대한 라인. 즉, 뭔가 같은 :

year1, month1, views, 0, 0... 
year1, month1, 0, column2, 0... 
year1, month1, 0, 0, column3... 
year2, month2, views, 0, 0... 
year2, month2, 0, column2, 0... 
year2, month2, 0, 0, column3... 

답변

1

당신은 다음과 같이해야 할 것 : 각 이후

SELECT MAX(views) as views, 
    MAX(column2) as column2, 
    MAX(column3) as column3 
FROM (
    SELECT YEAR(FROM_UNIXTIME(date)) AS year, 
     MONTH(FROM_UNIXTIME(date)) AS month, 
     SUM(views) AS views, 
     0 AS column2, 
     0 AS column3 
    FROM stats 
    GROUP BY year, month 
    UNION 
    SELECT YEAR(FROM_UNIXTIME(date)) AS year, 
     MONTH(FROM_UNIXTIME(date)) AS month, 
     0 AS views, 
     sum(column2) AS column2, 
     0 AS column3 
    FROM stats 
    GROUP BY year, month 
    UNION 
    SELECT YEAR(FROM_UNIXTIME(date)) AS year, 
     MONTH(FROM_UNIXTIME(date)) AS month, 
     0 AS views, 
     0 AS column2, 
     sum(column3) AS column3 
    FROM stats 
    GROUP BY year, month 
) 
GROUP BY year, month; 

가 같은 열이 포함 선택을, 당신은 모든 일에 걸쳐 집계를 선택 할 수 있습니다 각 행의 최대 값 데이터가 숫자가 아니거나 0보다 작은 경우 분명히 다른 집계 함수로 대체해야합니다.

+0

감사합니다. –

관련 문제