2013-10-27 4 views
0

먼저 MySQL에 신기한 존재라는 것을 모두에게 경고하겠습니다. 또한 아래 예제 쿼리를 테스트하지 않았으므로 완벽하지 않을 수도 있습니다.MySQL - 행의 행과 평균을 얻으십시오.

어쨌든, 나는 이름, 카테고리 및 점수가있는 항목 테이블을 가지고 있습니다. 12 시간마다 최상위 항목을 가져와 사용하고 제거합니다.

지금까지 나는 단순히이 가진 유일한 문제는 어떤 종류가 편견이며, 일반적으로 높은 점수를 가지고있다

SELECT * FROM items_table ORDER BY score DESC LIMIT 1 

으로 맨 위 항목을 잡아 왔습니다. 나는 스코어별로 정렬하는 대신 평균 스코어로 점수를 나눔으로써 이것을 해결하고 싶습니다. 예 :

ORDER BY score/(GREATEST(5,averageScore)) 

나는 averageScore를 찾는 가장 좋은 방법을 찾으려고합니다. 분명히 내가 그에게 averageScore 열을 추가하고

SELECT * FROM items_table, categories_table WHERE items_table.category = categories_table.category ORDER BY items_table.score/(GREATEST(5,categories_table.averageScore)) DESC LIMIT 1 

처럼 뭔가로 업데이트 유지하고이를 검색 할 수 cronjob에를 실행할 수 있도록 나는 범주에 대한 다른 테이블을 가지고 있지만이 지저분한 느낌. 내가 바로 하나 개의 쿼리의 평균을 검색 할 수있는 방법이 있다면 내가 궁금하네요 것은

SELECT AVG(score) FROM items_table GROUP BY category 

같은 것을 사용하여 모든 평균을 찾을 수 있습니다 알고 있습니다.

감사합니다,

YM

+0

"나는 MySQL을 가진 신인의 일이야"를 당신이 신인 무엇을 의미합니까? – Imran

+1

@imran : https://www.google.co.uk/search?q=define%3Arookie – eggyal

+0

약 3 년 동안 사용해 왔지만 6 개월 전부터 정규화 된 데이터베이스에 대해서만 배웠습니다. . –

답변

1

당신은 평균 계산 쿼리에 가입 할 수 있습니다 :

SELECT i.* 
FROM  items_table i JOIN (
      SELECT category, AVG(score) AS averageScore 
      FROM  items_table 
      GROUP BY category 
     ) t USING (category) 
ORDER BY i.score/GREATEST(5, t.averageScore) DESC 
LIMIT 1 
+0

완벽 해 보입니다. 몇 시간 만에 직접 테스트 해 보겠습니다. –

+0

완벽하게 보이지 않았으며 완벽하게 작동했습니다. 고맙습니다. –

관련 문제