【问题标题】:SQL Query -- AVG for Occurrence Across Multiple ColumnsSQL 查询——跨多列出现的 AVG
【发布时间】:2021-09-10 20:20:15
【问题描述】:

我有一张如下表

ID_A ID_B Avg_Class_Size
1 2 16
3 4 10
2 3 8
2 4 9

其中 ID_A 和 ID_B 代表不同的学生 ID 代码,AVG_Class_Size 代表学生 A 和 B 共享班级的平均班级规模。

我想计算每个学生的“avg_class_size”平均值,无论他们是学生“A”还是学生“B”,结果如下:

ID AVG
1 16
2 11
3 9
4 9.5

有没有一种简单的方法可以通过 SQL 查询来完成这项工作?

【问题讨论】:

  • id=4 的平均值应该是 9.5
  • 为什么会有这样的桌子?我无法想象:-(
  • 我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。以及原始数据是如何产生的?您真正想要的可能是对该查询进行微调。

标签: sql group-by union


【解决方案1】:

UNION ALL选择学生的所有id和平均值并聚合:

SELECT ID, AVG(Avg_Class_Size) average
FROM (
  SELECT ID_A ID, Avg_Class_Size FROM tablename
  UNION ALL
  SELECT ID_B ID, Avg_Class_Size FROM tablename
) t
GROUP BY ID

请参阅demo
结果:

ID average
1 16
2 11
3 9
4 9.5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多