从两个表的联合中选择

Nah*_*uto 3 mysql

我有两个表Cars2016Cars2015,它们具有完全相同的列。

我想简单地连接这两个表来创建这种查询:

SELECT Mark, COUNT(Models) FROM (Cars2015 UNION Cars2016) GROUP BY Mark
Run Code Online (Sandbox Code Playgroud)

此查询旨在了解每个标记有多少模型,累计 2015 年和 2016 年。

我怎样才能有效地做到这一点?

谢谢 !

Bar*_*mar 5

可能最有效的方法是在每个表中计数,然后将其合并并求和。

SELECT Mark, SUM(count) AS count
FROM (
    SELECT Mark, COUNT(*) AS count
    FROM Cars2015
    GROUP BY Mark
    UNION ALL
    SELECT Mark, COUNT(*) AS count
    FROM Cars2016
    GROUP BY Mark
) AS u
GROUP BY Mark
Run Code Online (Sandbox Code Playgroud)

如果您Mark在表中有索引,则子查询应该非常有效。然后它对包含聚合的相对较小的中间表进行联合,然后组合它们。

另一种选择是使用MERGE存储引擎,它允许您创建一个包含其他表并集的虚拟表:

CREATE TABLE Cars (
    -- column names here
) ENGINE=MERGE UNION=(Cars2015, Cars2016);

SELECT Mark, COUNT(*)
FROM Cars
GROUP BY Mark;
Run Code Online (Sandbox Code Playgroud)