2017-10-17 1 views
0

다음 SQL 쿼리를 단순화하거나 별칭을 지정하는 데 어려움을 겪고 있습니다. 나는 SQL에 상당히 익숙하지 않은 누군가가 올바른 방향으로 나를 가리킬 수 있습니다.이 SQL 쿼리를 단순화하거나 별칭을 지정하는 방법

줄의 두 번째 부분은 Where 조건 이외의 첫 번째 부분과 거의 동일하므로 변수 "X"라고 부르기 바랄뿐입니다.

다른 괄호와 순서로 시도했지만 구문 오류가 발생했습니다. 다음과 같이 내 코드는 다음과 같습니다

select 
(select avg(stars) from LONG EXPRESSION where Condition < Y) 
- 
(select avg(stars) from LONG EXPRESSION where Condition > Y) 

가 이상적으로 당신의 도움에 대한

select 
(select avg(stars) from (LONG EXPRESSION) X where Condition < Y) 
- 
(select avg(stars) from X where Condition > Y) 

덕분에 비슷한 일을 달성하고 싶습니다.

답변

0

조건부 집계를 사용해보십시오 :

select avg(case when Condition < Y then stars end) - 
     avg(case when Condition > Y then stars end) 
from LONG EXPRESSION 
0

내가 사용 사례를 모르겠지만, 방법은 하나 개의 쿼리로 결합에 대해 :

SELECT IF(Condition < Y, 'Less Than Y', 'GTE Y'), AVG(stars) 
FROM long expression 
GROUP BY 1 
+0

감사 매트, 내 SQLite는 수 있습니다, 나를 기능 경우 사용 두지 않을거야. 그러나 그렇습니다, 그것은 확실히 그것을하는 더 우아한 방법입니다. 나는 단지 내가 생각하는 2 개의 행의 가치에 차이를 가져 가야 할 것이다. – DanC

0

MySQL의 개발자 팀은 버전 8.0이 Common Table Expressions in MySQL (CTEs)있을 것이라는 점을 발표했다. 아마 이런 식으로 쿼리를 작성하는 것이 가능할 것이다 그래서 :

WITH my_cte AS 
(
(LONG EXPRESSION) 
) 
select (select avg(stars) from (LONG EXPRESSION) X where Condition < Y) - (select avg(stars) from X where Condition > Y); 
관련 문제