3

(この投稿の実用的な例については、SQLFiddleを参照してください)

次のように、株式情報の表があります。

sp100_id  _date         bullishness  agreement
----------------------------------------------
1         2011-03-16    1.01          0.33
1         2011-03-17    0.85          1.28
1         2011-03-18    0.89          1.25
1         2011-03-21    1.46          1.21
1         2011-03-22    0.39          2.53
2         2011-03-16    3.07          1.27
2         2011-03-17    2.09          0.80
2         2011-03-18    0.91          0.12
2         2011-03-21    1.50          0.00
2         2011-03-22    2.62          1.10
3         2011-03-16    0.73          1.13
3         2011-03-17    1.13          1.21
3         2011-03-18    1.12          0.45
3         2011-03-21    1.00          1.01
3         2011-03-22    1.00          0.53
4         2011-03-16    0.40          1.10
4         2011-03-17    2.40          0.03
4         2011-03-18    3.16          0.10
4         2011-03-21    0.86          0.50
4         2011-03-22    1.00          0.10

私は会社(sp100_idbullishnessを時間の経過とともに平均してトップ3に注文する必要があります:

SELECT 
  sp100_id, 
  AVG(bullishness) as bullishness, 
  AVG(agreement) AS agreement 
FROM stocks 
WHERE _date BETWEEN '2011-03-16' AND '2011-03-22' 
GROUP BY sp100_id LIMIT 3

結果は次のようになります。

SP100_ID    BULLISHNESS AGREEMENT
2           2.038           0.658
4           1.564           0.366
3           0.996           0.866

AGREEMENTトップ3ができたので、トップ3を昇順で並べ替える必要があります。

SP100_ID    BULLISHNESS AGREEMENT
4           1.564           0.366
2           2.038           0.658
3           0.996           0.866

これは1つのクエリで実行できますか?次のことを試しましたが、うまくいきませんでした。それはまだによってのみ注文しますbullishness

SELECT 
  sp100_id, 
  AVG(bullishness) as bullishness, 
  AVG(agreement) AS agreement 
FROM stocks 
WHERE _date BETWEEN '2011-03-16' AND '2011-03-22' 
GROUP BY sp100_id 
ORDER BY bullishness DESC, agreement ASC LIMIT 3

明確にするために:(1)平均ブルシネスが最も高い上位3社を見つける必要があります(2)次にこの上位3社を最低から最高の合意に並べる必要があります。できれば1つのクエリで。どのようにするか知っていますか?

4

1 に答える 1

3

クエリ(仮想テーブル)が他のクエリ内にネストされた構造を構築できるため、構造化クエリ言語と呼ばれます。

最初のクエリを取得します。これは、独自のORDER BY句が必要な場合を除いて正しいものであり、そのように別のクエリにネストします。

SELECT * 
  FROM (
           SELECT sp100_id,  
                  AVG(bullishness) as bullishness, 
                  AVG(agreement) AS agreement 
             FROM stocks 
            WHERE _date BETWEEN '2011-03-16' AND '2011-03-22' 
         GROUP BY sp100_id
         ORDER BY bullishness DESC
            LIMIT 3
  ) subquery
  ORDER BY agreement ASC

フィドルに行く:http ://sqlfiddle.com/#!2 / c9ff0 / 7/0

于 2012-09-02T11:53:07.307 に答える