2016-07-23 110 views
-1

我有2个表:table1table2,两个表的结构为; id - day - uniques - pageviews。我想创建一个包含uniques值的附加字段,其格式为2387|1283,同时在给定日期内总结uniquespageviews。我有:创建一个额外的列与选择联盟在Mysql

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 

然而,这只是资金uniquespageviews从2个表给定的日子,但我也需要知道确切的价值。假设我们在table1中有5个,在table2中有3个。该查询返回一个“唯一”字段值8。我还需要得到值5和3 seperately

任何帮助将节省大量的宝贵时间;)

谢谢

+0

您所查询的是正确的,你所描述的反应是正确的。目前还不清楚你需要什么。 –

+0

我写的查询总结了2个表中的'uniques'字段,但我也需要知道确切的值。假设我们在table1中有5个,在table2中有3个。此查询将返回一个值为8的“唯一身份”字段。我还需要分别获取值5和3 – burkul

+0

您的查询请求总和。也许你可以做一个group_concat(http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat),以便该列返回由分隔符分隔的各个值。 –

回答

0

你查询请求一笔款项。也许你可以做一个GROUP_CONCAT(MySQL reference),这样该列返回由分隔符分隔的各个值。示例如下:

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 

希望帮助:)

+0

这帮助了很多,但现在我不知道来自哪个表的唯一唯一值,顺序是随机的。有没有办法知道? – burkul

+0

我已经添加了一个concat和查询的表名。这应该有所帮助。 –

+0

您也可以在'SEPARATOR'关键字前添加'ORDER BY * colname * ASC',以便对值进行排序。 –