副問い合わせのSELECT句につきましてご質問です


以下の問題について、解説が理解できず困っています。

> 問) 平均給与が400を超える部署に所属する従業員を検索し、正しい記述について選択せよ。
[code]

>     SELECT employee_name, salary, department_id FROM employees
>     WHERE department_id IN
>     　(SELECT department_id, AVG(salary) FROM employees
>     　 GROUP BY department_id HAVING AVG(salary) > 400);
>  
[/code]

>
> 解答)  
>  副問合せのSELECT句の列数が多いためエラーとなる。

解説では以下のような記載がありました。

> 副問合せで部署毎の平均給与が400を超える部署と平均給与を検索しており、複数の列を返す複数列副問合せになっています。  
>
> しかし、主問合せのWHERE句でDEPARTMENT_ID列と副問合せの結果を比較していますが、副問合せのSELECT句の列数が多いためエラーとなります。

### 質問

副問い合わせのSELECT句が、どの部分と比較して列数が多いのでしょうか。  
参考サイトにあるように、WHERE句に指定された列のみ指定できるということなのでしょうか。

初歩的な質問で申し訳ございません。お手数ですがご教授お願いいたします。

参考サイト：  
<https://omachizura.com/2015/04/sql-subquery.html>




> WHERE句に指定された列のみ指定できるということなのでしょうか。

違います。副問い合わせの結果(サブクエリのSELECTで選択する)列の「数」の問題です。

ごく単純化して言うと、IN でサブクエリを使用する場合、サブクエリのSELECTには1つの列しか指定できません。例では2つ指定されてるのでエラーになります。

参考サイトに記載されてるのは自己相関サブクエリの例なので、結果として「INの左辺」と「右辺のサブクエリのSELECTで指定する列」が同じになってるものになっていますが、一般論として考えれば、外側(親)のクエリに現れる列とサブクエリは独立してるものなので、「INの左辺」と「右辺のサブクエリのSELECTで指定する列」は一致しないのが普通です。

