2014-12-03 2 views
1

현재 영업 직원 인 경우 평균 100 점을 넘는 각 영업 사원의 평균 평점을 얻는 방법을 파악하고 평균 평점 3 점 미만 (5 점 만점)MySQL : 마지막 x 레코드에 대한 항목 당 평균 값 찾기

I이 (조회에 필요하지 않은 정보를 떠나) 다음 표 :

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

이 내가, 감사 필요 정확히이었다! –