在 Mysql 中使用 select union 创建一个附加列
create an additional column with select union in Mysql
我有 2 个表:table1
和 table2
,两个表的结构都是 ; id
- day
- uniques
- pageviews
。我想创建一个包含 uniques
值的附加字段,格式如 2387|1283
,同时对给定日期的 uniques
和 pageviews
求和。我有:
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 个表中给定日期的 uniques
和 pageviews
求和,但我还需要知道确切的值。假设我们在表 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
希望对您有所帮助:)
我有 2 个表:table1
和 table2
,两个表的结构都是 ; id
- day
- uniques
- pageviews
。我想创建一个包含 uniques
值的附加字段,格式如 2387|1283
,同时对给定日期的 uniques
和 pageviews
求和。我有:
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 个表中给定日期的 uniques
和 pageviews
求和,但我还需要知道确切的值。假设我们在表 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
希望对您有所帮助:)