假设我有四个格式相同的表格:
Registered | Score
----------------------
0 | 10
1 | 5
1 | 7
0 | 6
我想获得按 Registered
字段 (0,1) 分组的每个人的 Score
平均值。在多个 SELECT
中,返回单个结果作为一行四列的未分组查询将是:
SELECT t1avg.a,t2avg.b,t3avg.c,t4avg.d FROM
(SELECT AVG(score) as a FROM table1) AS t1avg,
(SELECT AVG(score) as b FROM table2) AS t2avg,
(SELECT AVG(score) as c FROM table3) AS t3avg,
(SELECT AVG(score) as d FROM table4) AS t4avg
但是我如何将其分组以获得两个结果(按注册用户和未注册用户)? :
t1avg.a | t2avg.b | t3avg.c | t4avg.d | Registered
--------------------------------------------------
8 | 4.5 | 8 | 4.5 | 0
--------------------------------------------------
6 | 6.5 | 5 | 6 | 1
最佳答案
您需要对子查询进行分组,然后将它们进行匹配。确保它们都有 0 和 1 值,否则您将需要 LEFT OUTER JOIN
而不是内连接。
SELECT t1avg.a,t2avg.b,t3avg.c,t4avg.d, t1avg.registered FROM
(SELECT AVG(score) as a, registered FROM table1 GROUP BY registered) AS t1avg,
(SELECT AVG(score) as b, registered FROM table2 GROUP BY registered) AS t2avg,
(SELECT AVG(score) as c, registered FROM table3 GROUP BY registered) AS t3avg,
(SELECT AVG(score) as d, registered FROM table4 GROUP BY registered) AS t4avg
WHERE t1avg.registered=t2avg.registered and
t1avg.registered=t3avg.registered and
t1avg.registered=t4avg.registered
关于mysql - 多重选择中的 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465014/