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

标签 mysql

我有一系列 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

我需要什么样的查询才能在一行中输出按年和月分组的所有这些“第二”列? 即每个返回的行都包含“年、月、 View 、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,则必须替换不同的聚合函数。

关于MySQL 连接/联合结果来自更多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779864/

相关文章:

mysql - 无法在 Linux 服务器上通过 Toad 连接 mysql 数据库,而可以通过 putty 或 Linux 终端轻松连接?

mysql - 如何将一张表与一对多表合并为一条记录结果

php - 如何将数据库数据发送到html电子邮件

mysql - SQL LOWER 函数不适用于加密

大表上的 MySQL 性能问题 - 如何有效地缓存结果?

php - 尝试从数据库中获取 json 数据时获取 MYSQL 错误代码

MySQL 5.7.12 导入无法从 CHARACTER SET 'binary' 的字符串创建 JSON 值

php - SQL - 从两个不同的表返回数据

mysql - SQL 内连接表

mysql - R循环查询数据库中的所有表