如何简化/别名此SQL查询
问题描述:
我正在努力简化/别名以下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)
感谢您的帮助。
丹
答
尝试使用有条件聚集:
select avg(case when Condition < Y then stars end) -
avg(case when Condition > Y then stars end)
from LONG EXPRESSION
答
我不知道你的使用情况,但如何将它们组合成一个查询:
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);
感谢马特,这可能是我的SQLite,这不是让我用IF函数。但是,是的,这绝对是一种更优雅的方式。我将不得不考虑我假设的两行的差异。 – DanC