2017-10-17 134 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);