MySQL:是不是可以将 GROUP-BY 的结果加入到两个 SELECT 中?

Posted

技术标签:

【中文标题】MySQL:是不是可以将 GROUP-BY 的结果加入到两个 SELECT 中?【英文标题】:MySQL: Is it possible to JOIN the GROUP-BY'd results to two SELECTs?MySQL:是否可以将 GROUP-BY 的结果加入到两个 SELECT 中? 【发布时间】:2009-06-17 05:06:56 【问题描述】:

我有两个单独的 SELECT 语句,它们都是 GROUP-BY 单独的,例如:

SELECT x, y, z FROM a GROUP BY x
SELECT x, n, o FROM b GROUP BY x

我很想将这两个 SELECT JOIN 一起合并它们的列,例如:

SELECT x as x1, y, z FROM a GROUP BY x 
LEFT JOIN (
  SELECT x as x2, n, o FROM b GROUP BY x)
ON x1=x2;

这可能吗?我问是因为 mysql 在抱怨

您的 SQL 语法有错误; 检查对应的手册 您的 MySQL 服务器版本 在 'LEFT JOIN 附近使用正确的语法 选择 x 为 x2

如果可能的话,您对我的语法有什么问题有任何想法吗?

非常感谢!

【问题讨论】:

【参考方案1】:

这行得通

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 on (t1.b=t2.b)
);

或者,

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 using (b)
);

两个结果都是

+---+---+---+------+---+---+
| a | b | c | a    | b | c |
+---+---+---+------+---+---+
| 1 | 2 | 3 | NULL | 2 | 5 |
+---+---+---+------+---+---+
1 row in set (0.00 sec)

【讨论】:

【参考方案2】:

有几种方法可以实现:

    最佳:在分组之前加入表,如下所示: 选择 a.x、y、z、n、o 从 a.x = b.x 上的内部连接 ​​b 按 a.x、b.x 分组; 从两个查询中选择子查询,如下所示: 选择 * FROM (SELECT x, y, z FROM a GROUP BY x) 作为 a INNER JOIN (SELECT x, n, o FROM b GROUP BY x) AS b 开 a.x = b.x;

【讨论】:

我认为 (2) 是他正在寻找的。​​span> +1 确实,#2 正是我想要的 - 接受了之前的答案,因为它是第一个......但非常感谢!【参考方案3】:

您也可以使用以下查询:SELECT a.x, a.y, a.z, b.x, b.o, b.n FROM a, (SELECT x, n, o FROM b GROUP BY x) as b WHERE a.x = b.x GROUP BY a.x;

【讨论】:

以上是关于MySQL:是不是可以将 GROUP-BY 的结果加入到两个 SELECT 中?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Query - 使用 group-by 时获取丢失的记录

如何使用group-by并获取其他行结果

Hadoop实战-MapReduce之分组(group-by)统计

将两个 xml 文件分组,如 sql group-by [2]

SQL to Entity Framework Count Group-By

使用嵌套的 group-by/having 子句进行复杂连接?