2016-10-12 1 views
0

이 SQL SELECT 쿼리는 내가 원하는 모든 행을 제공하지만 ORDER BY 절이 정의한 별칭과 함께 재생되지 않는 것 같습니다. 대신 id하여 주문 만, avgratingid초에 의한 주문의이 별칭으로이 SQL 쿼리를 주문하지 않는 이유는 무엇입니까?

SELECT 
    IFNULL(AVG(ratings.rating), 0) AS avgrating, 
    users.username, 
    content.* 
FROM content 
LEFT JOIN ratings 
    ON ratings.contentid = content.id 
LEFT JOIN users 
    ON users.id = content.userid 
GROUP BY id 
ORDER BY 
    avgrating DESC, 
    id DESC; 

. 나는 비슷한 질문에 대한 답을 들여다 보았지만 내 경우에 도움이되는 것으로 나에게 뛰어 들지는 않았다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 더 많은 정보를 제공해야하는지 알려주세요.

감사합니다.

편집 : 결과 데이터는 다음과 같습니다. 넌센스의 자리 표시 자 텍스트를 용서하십시오.

avgrating username id title  content category userid 
3.0000  jijoij  11 nuunun  "foo" 0   2 
0.0000  jijoij  10 regreg  "foo" 3   2 
0.0000  jijoij  9 fefefe  "foo" 3   2 
0.0000  testkonto 8 i34jt4jt "foo" 3   4 
0.0000  testkonto 7 oouo  "foo" 3   4 
0.0000  testkonto 6 oyouuoouo "foo" 3   4 
5.0000  testkonto 5 oyouuouo "foo" 3   4 
1.0000  testkonto 4 jijijijiji "foo" 3   4 
0.0000  testkonto 3 fgreg  "foo" 3   4 
0.0000  testkonto 2 tbtrb  "foo" 3   4 
3.6667  jijoij  1 gergj  "foo" 1   2 

편집 2 : 그게 내가 원하는 한 이후 나는 ORDER BY 절에 content.id을 지정 시도했습니다. 아무것도 변하지 않았다.

+0

별칭 대신 표현식 자체를 '주문'할 때 작동합니까? 예 : 'IFNULL (AVG (ratings.rating), 0) desc, id desc' – SlimsGhost

+0

@SlimsGhost 그건 좋은 생각이야,하지만 방금 해봤는데 똑같은 일을한다. –

+2

그런 경우, 현재 가지고있는 결과를 게시하여 "잘못된"정렬을 보여줄 수 있습니까? – SlimsGhost

답변

1

I put this together in SQLFiddle 그리고 문제가 발견되었습니다.

avgrating username id userid 
5   joe   1 1 
4   joe   2 1 
3   joe   3 1 
2   jill  5 4 
2   jill  6 4 
1   bob   4 3 

그룹화 및 정렬은 content.id입니다. 나는 OP가 원했던 것 같다고 users.id. 문제는 다음과 같습니다.

GROUP BY id 
ORDER BY 
    avgrating DESC, 
    id DESC; 

id이 모호합니다. 어쨌든 내 스키마의 모든 테이블에는 id 열이 있습니다. 나는 그것을 해결할 수있는 표준 방법이 있는지 모르겠다. 그러나 쿼리가 FROM content이기 때문에 MySQL은 content.id을 고르는 것으로 보인다.

해결책은 id 열을 모호하게 만드는 것입니다.

GROUP BY users.id 
ORDER BY 
    avgrating DESC, 
    users.id DESC; 

Here's the result.

avgrating username id userid 
4   joe   1 1 
2   jill  5 4 
1   bob   4 3 
+0

고마워,하지만 정말로 'content.id'라고 나는 주문하고 싶다. 나는 지금 그것을 ORDER BY 절에서 지정하려고 시도했지만 아무 것도 변경하지 않았다. –

+0

@AgBengip Ah. Dama, 이제 SQLFiddle에서 스키마를 다시로드 할 수 없습니다. : -/ – Schwern

+0

@AgBengip 적어도 ORGER BY DESC를 사용해 보지 않으셨습니까? – Schwern

관련 문제