mysql - 多重选择中的 GROUP BY

标签 mysql

假设我有四个格式相同的表格:

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/

相关文章:

mysql - 在第 3 列的基础上选择 2 个匹配的列

php - MySQL 按类别分组,每个类别限制 N 个

sql - 在 SQL WHERE ... IN 子句中使用文本文件中的术语

mysql - 用一个表中的引用 ID 替换另一个表中的字段

mysql - 将站点移至暂存区后未找到基表或 View

c++ - 多次调用存储过程时出现 mySQL C++ 连接器 "Commands out of sync"

php - 在 SELECT 语句中将数字放在引号周围有什么影响?

mysql - 聚合连接表的最大元素

php - 制作 $row 数组

php - 找到是营业时间 : MySQL hours calculation