2012-12-31 5 views
0

나는 이와 같은 질문이 전에 물어 왔지만, 어떻게하면 내 코드에 적용 할 수 있을지 모르겠다. 나는 두 개의 테이블을 가지고있다. 나는 rating 표처럼 가지고, 다른 테이블에서다른 테이블의 합계로 SELECT 문을 주문 하시겠습니까?

id | name | description 
1 Test Test entry 

: :이 같은 항목을 저장하는 entry 테이블이

내가 첫 번째 테이블의 모든 항목을 나열 할
id | entryid | rating 
1 | 1  | 1 
2 | 1  | -1 

, 총 등급으로 주문하십시오. 그래서이 예제에서 1 + -1 = 0이기 때문에 Entry # 1의 등급은 0입니다. 쿼리로이 작업을 수행 할 수있는 방법이 있습니까?

+0

귀하의 질문은 매우 불분명합니다. 당신은'COUNT'를 언급하지만, 당신의 설명은 데이터를 SUM으로 처리하는 것이며, 당신은'ORDER BY'라고 언급하지만, 정렬 순서는 정렬이며, 텍스트에는 아무것도 정렬하는 정보가 없습니다. 당신은 테이블 이름을 제공하기 위해 편집하고 명확하게 할 수 있습니까? 감사. –

+0

그래, 미안하지만, 내가 그 일을 쓸 때까지는 그것이 총액이라는 것을 깨닫지 못했다. – CommunistPancake

답변

2

이것을 확인하십시오. SQLFIDDLE DEMO. 각 entryID에 대한 모든 평점을 계산하려면 Sum을 사용해야합니다.

검색어 :

select r.entryid, sum(r.rating) 
from ratings r 
group by r.entryid 
; 

결과 :

ENTRYID  SUM(R.RATING) 
1   -1 
2   2 

최종 쿼리 :

select e.id, e.name, sum(r.rating) 
from entry e 
left join 
ratings r 
on r.entryid = e.id 
group by e.id 
; 

최종 결과 :

ID NAME SUM(R.RATING) 
1 Test1 -1 
2 Test2 2 
0

는이 같은 인라인 뷰를 사용할 수 있습니다

select id, `name`, description from (
select t1.id, t1.`name`, t1.description, sum(t2.rating) as sum_rating 
from 
t1 inner join t2 on t1.id = t2.entryid 
group by t1.id, t1.`name`, t1.description 
) as t 
order by sum_rating desc 

그래서, 당신은 쿼리의 내부에서 그 금액으로 모든 관련 평가의 합계, 다음 순서를 계산한다. 첫 번째 테이블의 일부 행에 등급이없는 경우 내부 조인을 왼쪽 조인으로 바꿉니다.

+0

"인라인보기"란 무엇입니까? 하위 쿼리처럼 보입니다. – Barmar

+0

하지만 하위 쿼리가 필요 없다고 생각합니다. 조인 자체에서'ORDER BY' 만 사용할 수 있습니다. – Barmar

+0

@Barmar - CommunistPancake가 합계를 선택하기를 원하지 않는다고 생각합니다. 인라인 뷰/하위 쿼리는 출력 열에서 합계를 "숨기"위해 필요하지만 순서대로 사용할 수 있도록합니다. 이상하게도, 수용된 대답에는 order by 절이 없습니다 !! –

관련 문제