相関副問い合わせ

意外とよく使う相関副問い合わせです。各レコードの値に対してSQLを実行するというというイメージ。以下の例ではs1の各レコードに対してWHERE句の中にある括弧内のSQLを実行するというような感じです。

SELECT
  p.ProductName
, s1.SaleDate
FROM
  Sales AS s1
    JOIN
  Products AS p
    ON s1.ProductID = p.ProductID
WHERE
  s1.Quantity >
  (
    SELECT
      AVG( Quantity )
    FROM
      Sales AS s2
    WHERE
      s1.ProductID = s2.ProductID
  )
ORDER BY
  p.ProductID, s1.SaleDate DESC
;