我怎样才能简化/别名这个 SQL 查询

How can I simplify / alias this SQL query

我正在努力简化/别名以下 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)

感谢您的帮助。

我不知道你的用例,但如何将它们组合成一个查询:

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

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);

尝试使用条件聚合:

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