2011-10-15 50 views
0

我有一系列MySQL表,其中第一列是Unix時間格式化日期,第二列是每個表格具有不同格式的一些數據。來自更多表的MySQL聯合/聯合結果

我使用類似這樣的一個組由月份的數據查詢:

SELECT YEAR(FROM_UNIXTIME(date)) AS year, MONTH(FROM_UNIXTIME(date)) AS month, SUM(views) AS views, 
FROM stats 
GROUP BY year, month 

我需要什麼樣的查詢,才能夠輸出所有這些「第二」列一行通過一年D組和月? 即這樣每個返回的行包含「年,月,視圖,列2,列3」...

我試過使用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

這是明智的,謝謝! –