我怎样才能简化/别名这个 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
我正在努力简化/别名以下 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