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 时获取丢失的记录
Hadoop实战-MapReduce之分组(group-by)统计
将两个 xml 文件分组,如 sql group-by [2]