2016-07-23 107 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',以便對值進行排序。 –