如何简化/别名此SQL查询

时间:2017-10-17 17:40:28

标签: mysql sql alias

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我不知道您的用例,但如何将它们合并到一个查询中:

class User < ApplicationRecord
  mount_uploader :avatar, AvatarUploader

答案 1 :(得分: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);

答案 2 :(得分:0)

尝试使用条件聚合:

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