在 Mysql 中使用 select union 创建一个附加列

create an additional column with select union in Mysql

我有 2 个表:table1table2,两个表的结构都是 ; id - day - uniques - pageviews。我想创建一个包含 uniques 值的附加字段,格式如 2387|1283,同时对给定日期的 uniquespageviews 求和。我有:

SELECT id, 
       day, 
       Sum(uniques)   AS uniques, 
       Sum(pageviews) AS pageviews 
FROM   (SELECT * 
        FROM   table1 
        WHERE ` day ` >= '2016-07-21' 
              AND ` day ` <= '2016-07-22' 
        UNION 
        SELECT * 
        FROM   table2 
        WHERE ` day ` >= '2016-07-21' 
              AND ` day ` <= '2016-07-22') t1 
GROUP  BY ` day ` 
ORDER  BY ` day ` ASC 

然而,这仅对 2 个表中给定日期的 uniquespageviews 求和,但我还需要知道确切的值。假设我们在表 1 中有 5 个,在表 2 中有 3 个。此查询 returns 一个值为 8 的 'uniques' 字段。我还需要分别获取值 5 和 3

任何帮助都会节省很多宝贵的时间;)

谢谢

您的查询请求一个总和。也许你可以做一个 GROUP_CONCAT ( MySQL reference ) 所以列 returns 各个值由分隔符分隔。示例如下:

SELECT id, 
   day, 
   SUM(uniques)            AS uniques, 
   GROUP_CONCAT(CONCAT(uniques, ':', `tablename`) SEPARATOR '|')   AS uniques_values, 
   SUM(pageviews)          AS pageviews, 
   GROUP_CONCAT(CONCAT(pageviews, ':', `tablename`) SEPARATOR '|') AS pageviews_values 
FROM   (SELECT * , 'table1' as `tablename`
        FROM   table1 
        WHERE  day >= '2016-07-21' 
               AND day <= '2016-07-22' 
        UNION 
        SELECT * , 'table2' as `tablename`
        FROM   table2 
        WHERE  day >= '2016-07-21' 
               AND day <= '2016-07-22') t1 
GROUP  BY day 
ORDER  BY day ASC 

希望对您有所帮助:)