繁体   English   中英

来自更多表的MySQL连接/联合结果

[英]MySQL join/union results from more tables

我有一系列MySQL表,其中第一列是Unix时间格式的日期,第二列是一些数据,每个表具有不同的格式。

我正在使用与此查询类似的查询按月对数据进行分组:

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

我需要哪种查询才能在按年和月分组的一行中输出所有这些“第二”列? 即,使得返回的每一行都包含“年,月,视图,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...

您必须执行以下操作:

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的数据,则必须替换为其他聚合函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM