2017-10-17 133 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,這不是讓我用IF函數。但是,是的,這絕對是一種更優雅的方式。我將不得不考慮我假設的兩行的差異。 – 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);