2012-12-11 4 views
2

이 쿼리에는 한 가지 문제가 있습니다. ((total + rec_host)/2) AS total2을 사용할 수없는 것 같습니다. 어떻게하지 않고이 절차에 대해 갈 것 :다른 MySQL 열 값으로 별칭 추가

SELECT host_name, 
     SUM(rank_ur) AS cnt1, 
     SUM(rank_scs) AS cnt2, 
     SUM(rank_tsk) AS cnt3, 
     SUM(rank_csb) AS cnt4, 
     SUM(rank_vfm) AS cnt5, 
     SUM(rank_orr) AS cnt6, 
     SUM(IF(rec_host = 1,1,0)) AS rh1, 
     SUM(IF(rec_host = 0,1,0)) AS rh2, 
     ((rank_ur + rank_scs + rank_tsk + rank_csb + rank_vfm + rank_orr)/6) AS total, 
     ((total + rec_host)/2) AS total2 
    FROM lhr_reviews 
    GROUP BY host_name 
    ORDER BY total 
    DESC LIMIT 0,10 

답변

5

를 사용하여 하위 쿼리 그래서 같은 :

SELECT 
    host_name, 
    cnt1, 
    cnt2, 
    cnt3, 
    cnt4, 
    cnt5, 
    cnt6, 
    rh1, 
    rh2, 
    total, 
    ((total + rec_host)/2) AS total2 
FROM 
(
    SELECT host_name, 
     rec_host, 
     SUM(rank_ur) AS cnt1, 
     SUM(rank_scs) AS cnt2, 
     SUM(rank_tsk) AS cnt3, 
     SUM(rank_csb) AS cnt4, 
     SUM(rank_vfm) AS cnt5, 
     SUM(rank_orr) AS cnt6, 
     SUM(IF(rec_host = 1,1,0)) AS rh1, 
     SUM(IF(rec_host = 0,1,0)) AS rh2, 
     ((rank_ur + rank_scs + rank_tsk + 
     rank_csb + rank_vfm + rank_orr 
     )/6) AS total 
    FROM lhr_reviews 
    GROUP BY host_name, rec_host 
) t 
ORDER BY total 
DESC LIMIT 0,10; 
+1

하나를 업데이트하기 위해 더 나은 기사를 검색합니다, 나는 :-) ... 같은 일을 생각하지만 하위 쿼리에서 제거하십시오 '((total + rec_host)/2) AS total2' –

+0

나는 혼란 스럽다. 별칭을 선택 하시겠습니까? 그건 나에게 이상한 것 같다. 나는 MySQL에서 초보자이지만. – Justin

+0

+1 Gamal, 빠르다;) – bonCodigo

3

은 당신이 할 수있는 것은 이것이다 여기

((((rank_ur + rank_scs + rank_tsk + rank_csb + rank_vfm + rank_orr)/6) + rec_host)/2)

내 쿼리 :

select x.*, ((x.total + rec_host)/2) AS total2 
from (

SELECT host_name, rec_host, 
     SUM(rank_ur) AS cnt1, 
     SUM(rank_scs) AS cnt2, 
     SUM(rank_tsk) AS cnt3, 
     SUM(rank_csb) AS cnt4, 
     SUM(rank_vfm) AS cnt5, 
     SUM(rank_orr) AS cnt6, 
     SUM(IF(rec_host = 1,1,0)) AS rh1, 
     SUM(IF(rec_host = 0,1,0)) AS rh2, 
     ((rank_ur + rank_scs + rank_tsk + rank_csb + rank_vfm + rank_orr)/6) AS total 
    FROM lhr_reviews 
    GROUP BY host_name 
    ORDER BY total 
    DESC LIMIT 0,10 
) as x 
; 

별칭과 다른 열의 값이 같은 수준 인 SELECT 인 경우 열을 별칭으로 사용할 수 없습니다. 따라서 기본적으로 열의 이름을 바꾸거나 계산 된 열의 이름을 지정할 수있는 파생 된 쿼리를 사용할 수 있습니다. Check on Rubens Farias and Rob Van Dam answer here

PS : 답 : 속도에 대한

+0

고마워요, 많이 배웠습니다 :) 죄송합니다. "체크 표시"를 할 수 없었습니다. - 그가 당신을 때렸습니다. – Justin

+1

+1, 고맙습니다. 너를 때려서 미안해. –

+1

@MahmoudGamal 건강한 경쟁은 매우 유용하며 우리는 더 나은 솔루션을 얻습니다. :) – bonCodigo