2014-12-03 92 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

相關問題