2009-12-18 4 views
0

저는 2 개의 열, 하나는 rating_average, 다른 하나는 rating_count라고합니다.MySQL에서 가장 높은 등급을 선택하십시오

등급이 가장 높은 3 개의 행을 선택해야합니다. 평가 횟수도 함께 계산됩니다.

+0

* "등급과 함께 가장 높은 등급으로 등급이 계산됩니다."* 나는 그 의미를 따르지 않습니다. 카운트는 평균의 한 측면이며, 이미 "인수"되어 있습니다 ('평균 = 합계/개수'[기본적으로]). –

답변

2

당신은 같은 절에 의해 순서대로 연산을 수행 할 수 있습니다 최초의 N 행

예를 들면보다 구체적인 해결책을 제시 할 수 있습니다.

0
SELECT * FROM table ORDER BY rating_average DESC LIMIT 3 

정상적으로 작동하지만 사용자가 원하는 것을 정확하게 볼 수 있도록 스키마를 게시해야합니다.

0

어떻게 평가 계수를 정확히 계산 하시겠습니까? 당신이 적어도 3 개 등급으로 항목을 말을 제한하기를 원할 경우, 당신이 할 수 있습니다 : 처음 3 개 행을 제공

SELECT rating_average, rating_count 
FROM mytable 
WHERE rating_count > 3 
ORDER BY rating_average DESC 
LIMIT 3 
1
SELECT * 
FROM table 
ORDER BY rating_average DESC, 
     rating_count DESC 
LIMIT 3 

는 RATING_COUNT에 의해 처음 rating_average하여 다음 분류.

예 :

select * 
from  YourTable 
order by rating_average * rating_count DESC 
limit  3 

MySQL의에서, 당신은에 행 집합을 제한하는 쿼리의 끝에서 limit을 추가 할 수 있습니다

================================= 
| rating_average | rating_count | 
================================= 
|  9.1  |  5  | 
|  8.9  |  9  | 
|  8.9  |  3  | 
================================= 
+0

-1 두 개의'order by' 행에 구문 오류가 발생했습니다 – Andomar

+0

복사하여 붙여 넣기 오류가 발생했습니다. –

+0

Ok, downvote removed :) – Andomar

0

당신이 시작하는 rating_average 및 RATING_COUNT을 가지고 있지 않지만 Andomar에 의해 주어진 여전히 결과를하려면 여기에만 테이블 '제품'과 '리뷰'



    SELECT products.title,reviews.fk_productid, 
    COUNT(reviews.review_id) AS review_count, 
    AVG(reviews.rating) AS rating_average, 
    COUNT(reviews.review_id) * AVG(reviews.rating) AS total_score 
    FROM reviews 
    INNER JOIN products 
    ON products.product_id = reviews.fk_productid 
    GROUP BY fk_productid 
    ORDER BY total_score DESC 

를 사용하여 완전한 쿼리입니다
관련 문제