MYSQL 选择每个不同条目的平均值

标签 mysql sql

我尝试通过查询而不是在服务器端解决此问题。
我有一个这样的表:

+----+-----------+--------+--------+
| ID | RateValue | Marker | Marked |
+----+-----------+--------+--------+
|  1 |         8 | USER1  | USER2  |
|  2 |        10 | USER2  | USER1  |
|  3 |         9 | USER3  | USER1  |
|  4 |         8 | USER1  | USER3  |
|  5 |         6 | USER2  | USER3  |
|  6 |         7 | USER3  | USER2  |
+----+-----------+--------+--------+

我想要一个查询,该查询返回每个标记用户的平均值。

USER1 被标记在第 2 行和第 3 行,总计为 9.5 (9+10/2)。
USER2 被标记在第 1 行和第 6 行,总计为 7.5。

到目前为止,我只能通过将其分为两个步骤来使其工作: 获取所有唯一标记的用户:

SELECT DISTINCT Marked FROM reviews

然后获取每个用户的 AVG:

SELECT AVG(rateValue) FROM reviews WHERE Marked = ?

我尝试将其结合起来,但它返回了我的总平均值:

SELECT Marked,AVG(rateValue) FROM reviews WHERE Marked IN (SELECT DISTINCT Marked FROM reviews)

但它会返回总平均值,我希望有一个查询可以返回每个不同标记用户的平均值。

最佳答案

简单地使用聚合:

select marked, avg(ratevalue)
from reviews
group by marked;

如果您想要不考虑列的平均值,请使用 union all 进行逆透视和聚合:

select user, avg(ratevalue)
from ((select marker as user, ratevalue
       from reviews
      ) union all
      (select marked as user, ratevalue
       from reviews
      )
     ) r
group by user;

这是通用 SQL。有些数据库有更有效的方法来反转两列。

关于MYSQL 选择每个不同条目的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997201/

相关文章:

mysql - Symfony2 多对多关系数据库结构

sql - 如何仅获取年份作为 SQL Server 中日期/日期时间的一部分

sql - 从另一个表中选择列中的相似值并在主表中使用另一个表值

mysql - 是否可以在 phpmyadmin 中为外键约束添加条件?

java - 在java中配置mysql url

PHP,限制用户输入错误值x次

sql - 值为 NULL 的列会影响 Microsoft SQL Server 的性能吗?

sql - 用具有嵌入式SQL的旧Delphi代码执行TDD的好方法是什么

mysql - 获取昨天的unix时间戳日期的随机记录

mysql - #1111 - 组功能使用无效