MySQL:查找最后x条记录的每个条目的平均值

标签 mysql

我正在尝试找出每个销售人员在最近 100 个评分中的平均评分(如果他们目前在职且平均评分低于 3(满分 5 分))。

我有下表(省略查询中不需要的信息):

users
id    name     employed
-----------------------
1     John     1
2     Sue      1
3     Bob      0
...

sales
id     users_id
------------------
100    3
101    2
102    3
103    1
...

ratings
sales_id   rating
-----------------
100        4
101        5
102        5
103        2
...

我当前的查询搜索所有内容并返回所有订单的平均值,但我希望它只获取最近的 100 个评级(如果销售人员没有售出那么多商品,则更少),仍然排除任何不再受雇或最近 100 个订单的评级大于 3。这是当前查询:

SELECT u.name, avg(r.rating) as avg_rating, count(r.rating)
FROM users AS u
JOIN sales AS s ON s.users_id = u.id
JOIN ratings AS r ON r.sales_id = s.id
WHERE u.employed = 1
GROUP BY u.id
HAVING avg_rating <= 3;

任何帮助都会很棒!谢谢! :D

最佳答案

您可以使用我的 sql 变量来跟踪评分数量,以便您只能获得最近的 100 个评分,按 sales_id 排序,以便您获得最近的评分。

<强> SQL FIDDLE DEMO

SELECT T.name, avg(T.rating) as avg_rating, count(T.rating)
FROM
(
  SELECT u.name, r.rating, @num := if (@name = name, @num+1, 1) as rn,
       @name:= name as var_name
  FROM users AS u
  JOIN sales AS s ON s.users_id = u.id
  JOIN ratings AS r ON r.sales_id = s.id
  AND u.employed = 1
  JOIN ( select @name :='' , @num :=1) var
  order by sales_id desc
)T
where T.rn <=100
GROUP BY T.name
HAVING avg_rating <= 3

关于MySQL:查找最后x条记录的每个条目的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279131/

相关文章:

php - 将变量连接到 $_POST[]

mysql - 有没有办法检查 dump mysql import 的加载状态?

Mysql USING 重命名列

php - 如何在MYSQL中搜索一行中的特定单词?

mysql查询问题

mysql - 在 SQL 中检查每个月每天有多少次

mysql - 使用 phpMyAdmin 创建表,缺少 BINARY 类型

mysql - 按 max() 其他列显示列

mysql - 修复具有不同条件的两个左连接的 SQL

PHP分页类