2017-10-17 5 views
0

次のSQLクエリを単純化/エイリアスするのは苦労します。私はかなりSQLに新しい、うまくいけば、誰かが正しい方向に私を指すことができます。このSQLクエリを簡略化/エイリアスするには

行の2番目の部分はWhere条件以外の1番目の部分とほとんど同じですから、単に変数 "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

私はあなたのユースケースを知っているが、どのように1つのクエリにそれらを組み合わせることについてはありません:

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

おかげマット、それは私のSQLiteのかもしれないが、それが機能なら、私に使わせていません。しかし、はい、それは間違いなくそれを行うよりエレガントな方法です。私は、私が想定している2行の価値の差を取らなければなりません。 – 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); 
関連する問題