使用 avg 和 group by 进行 SQL 查询

2024-05-06

我在为 MySQL 编写 SQL 查询时遇到一些问题。我有一个具有以下结构的表:

mysql> select id, pass, val from data_r1 limit 10;
+------------+--------------+----------------+
| id         | pass         | val            |
+------------+--------------+----------------+
| DA02959106 | 5.0000000000 |  44.4007000000 |
| 08A5969201 | 1.0000000000 | 182.4100000000 |
| 08A5969201 | 2.0000000000 | 138.7880000000 |
| DA02882103 | 5.0000000000 |  44.7265000000 |
| DA02959106 | 1.0000000000 | 186.1470000000 |
| DA02959106 | 2.0000000000 | 148.2660000000 |
| DA02959106 | 3.0000000000 | 111.9050000000 |
| DA02959106 | 4.0000000000 |  76.1485000000 |
| DA02959106 | 5.0000000000 |  44.4007000000 |
| DA02959106 | 4.0000000000 |  76.6485000000 |

我想创建一个查询,从表中提取以下信息:

id, AVG of 'val' for 'pass' = 1, AVG of 'val' for 'pass' = 2, etc

查询的结果应该如下所示:

+------------+---------+---------+---------+---------+---------+---------+---------+
| id         | val_1   | val_2   | val_3   | val_4   | val_5   | val_6   | val_7   |
+------------+---------+---------+---------+---------+---------+---------+---------+
| DA02959106 | 186.147 | 148.266 | 111.905 | 76.3985 | 44.4007 | 0       | 0       |
+------------+---------+---------+---------+---------+---------+---------+---------+

当然,每个唯一的“id”有更多行。

我已经尝试过一些查询,例如

SELECT id, pass, AVG(val) AS val_1 FROM data_r1 WHERE pass = 1 GROUP BY id;

这会返回正确的结果,但我必须使用“pass”的其他可能值(最多 7)的结果来扩展它

我尝试在 AVG 中使用嵌套 SELECT,但这不起作用,因为我不知道如何正确地将其限制为当前“id”。

然后,我创建了视图来表示“pass”= 1、“pass”= 2 等每个查询的结果。但对于大多数 id,“pass”的最高值为 5。当使用 JOIN 查询获取最终结果时我收到空结果集的视图,因为某些视图是空的/没有特定“id”的值。

有任何想法吗?


如果我明白你需要什么,请尝试以下操作:

SELECT id, pass, AVG(val) AS val_1 
FROM data_r1 
GROUP BY id, pass;

或者,如果您希望每个 id 只占一行,则:

SELECT d1.id,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 1) as val_1,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 2) as val_2,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 3) as val_3,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 4) as val_4,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 5) as val_5,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 6) as val_6,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 
     WHERE d2.id = d1.id AND pass = 7) as val_7
from data_r1 d1
GROUP BY d1.id
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 avg 和 group by 进行 SQL 查询 的相关文章

随机推荐

  • 是否可以一次显示 HTML 选择表单字段中的所有选项,而无需单击它?

    我正在使用 X Editable jQuery 就地编辑库作为任务状态选择字段 整个过程的所有阶段如下所示 单击状态 然后 它隐藏状态 SPAN 并显示隐藏的选择字段 您可以单击选择字段 使其下拉并显示所有可用选项 单击新的选择选项值 然后
  • 在 Swift 中获取可见的 IndexPath UICollectionView

    如何获得visible IndexPath while scrolling in collectionView 我参考了很多link1 https stackoverflow com questions 30281451 iterate o
  • Azure DocumentDB 本地模拟器是否支持 mongodb 协议?

    Azure DocumentDB 本地模拟器是否支持类似于 Azure 托管 DocumentDB 中可用的 MongoDB 协议的 mongodb 协议 我没有看到启动本地模拟器时指定协议的方法 是的 Azure DocumentDB 模
  • PHP cookie 和会员安全

    我创建了一个论坛 该论坛在登录时使用 PHP 会话来确定用户 ID 并使用 cookie 来进行日志登录 我想我有两个问题 这是最好 最安全的方法吗 可以使用javascript通过地址栏手动添加cookie 这是一个巨大的安全风险 有没有
  • 哪些参数被传递给回溯中的函数?

    在 R 中 如果执行因错误而停止 我可以评估traceback 查看哪个函数发生了错误 哪个函数是从哪个函数调用的 等等 它会给出类似这样的信息 8 ar yw default x aic aic order max order max n
  • 如何使用 jQuery 获取 asp:RadioButton 的选中值?

    我需要做这样的事情
  • 使用 Reporting Services 将组保持在一页上

    我使用 Reporting Services 创建了一个报表作为 C 应用程序的一部分 但我找不到一些我习惯在其他环境中看到的功能 我相信 MS Access 和 Crystal 报表都有一个名为 保持在一起 的选项 这样您就可以将特定的数
  • Django - 带上下文的重定向

    我有一个注册页面 它获取用户的用户名和密码并将其保存在数据库中 如果用户注册成功 我想将他重定向到 登录 页面 该页面的值表示注册成功 重定向页面上的预期输出 您已成功注册 Sign In Username Password 因此 我从注册
  • 修改多面图中的图例,ggplot2

    对于此图 我想将图例分成 2 个单独的图例 一种将脉冲湿地显示为圆形 其阴影对应于湿地编号 另一种将静态湿地显示为三角形 其灰色阴影对应于湿地编号 那么水文学传说就不再必要了 我想摆脱它 这就是我想要的图例的样子 当然要小一些 这是在 Po
  • 替换 woocommerce 面包屑中的主页链接

    我知道这是一个有点愚蠢的问题 但我像个傻瓜一样找不到正确的答案 目前这就是我的面包屑的样子 首页 男配音 德里克 道尔 我需要将主页链接名称更改为 Voice Overs 并将其链接到另一个页面 请任何帮助都会很棒 Thanks Wooco
  • 如何从与静态路径不同的目录提供静态文件?

    我正在尝试这个 favicon path path to favicon ico settings debug True static path os path join PATH static handlers r WebHandler
  • 使用 ScrollView 避免键盘输入

    我是 React Native 的新手 并且有一个我在 React Native 文档中没有找到的问题 我正在研究这个组件KeyboardAvoidingView https facebook github io react native
  • UITableView:以编程方式滚动内容视图

    您好 我正在尝试转发从 UITableView 前面的 UIView 收到的触摸 但这样做我不能再让桌子滚动了 see here https stackoverflow com questions 3417808 uitableview c
  • 寻找跨多维数组实现 logSumExp 的更快方法

    我正在编写的一些 R 代码中有一行非常慢 它使用 apply 命令在 4 维数组中应用 logSumExp 我想知道有什么办法可以加快速度 Reprex 这可能需要 10 秒或更长时间才能运行 library microbenchmark
  • Google Drive Api 在发布应用程序后停止工作

    我在我的应用程序中使用 google Drive api 当我使用 apk 文件安装它时 它在调试和发布版本上都能正常工作 但是 如果我在 Playstore 上发布相同版本的 apk 然后从那里下载它 我将无法登录 Google 关于这个
  • 创建符号数组

    有没有更干净的方法来做这样的事情 w address city state postal country map to sym gt address city state postal country 我本想 s本来可以做我想做的事 但事实
  • 使用openssl从服务器获取证书

    我正在尝试获取远程服务器的证书 然后可以将其添加到我的密钥库中并在我的 Java 应用程序中使用 一位高级开发人员 正在度假 告诉我我可以运行这个 openssl s client connect host host 9999 获取转储的原
  • 使用 Rcpp 的 R 快速 cbind 矩阵

    cbindR中的重复调用比较耗时 但对于各种数据类型也很强大 我编写的代码比cbind当绑定两个矩阵时 但bind cols in dplyr封装速度仅比cbind 唯一遗憾的是它不能将矩阵作为输入 有人可以让下面的代码更快吗 另外 如何快
  • 使用 PHP 发布到 Blogger

    我在使用 PHP 的 Blogger API 时遇到问题 我需要的是能够将新的博客文章发布到我的博客帐户 我使用的代码取自 Google API 页面 http code google com intl nl apis blogger do
  • 使用 avg 和 group by 进行 SQL 查询

    我在为 MySQL 编写 SQL 查询时遇到一些问题 我有一个具有以下结构的表 mysql gt select id pass val from data r1 limit 10 id pass val DA02959106 5 00000