2014-12-03 91 views
1

我试图弄清楚如何获取每个销售人员在过去的100条评级中的平均评级(如果他们目前就业),并且他们的平均评级少于3(满分5)。MySQL:查找最后x个记录的每个条目的平均值

我有(未在查询所需留出的信息)下表:

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

回答

1

您可以使用我的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 
+0

这正是我需要的,谢谢! – 2014-12-18 07:06:02

相关问题