1

クエリに行き詰まっています。正しく動作させることができません。

これは私がする必要があることです:

従業員テーブルから部門別にグループ化された最大平均給与と最小平均給与の両方を返すクエリを作成します。

これは私が作ったものです:

SELECT
(SELECT AVG(MIN(salary)) FROM employees GROUP BY department_id) As "Minimum Average salary",
(SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id) As "Maximum Average Salary"
FROM EMPLOYEES

しかし、それは私に複数の行の結果を返し続けます。LIMIT 2 を使用できません。LIMIT でクエリを実行するとエラーが発生します。

次のクエリも試しましたが、エラーが発生します: 式がありません。

SELECT
AVG(SELECT MIN(salary) FROM employees GROUP BY department_id)) As "Minimum Average salary",
AVG((SELECT MAX(salary) FROM employees GROUP BY department_id)) As "Maximum Average Salary"
FROM EMPLOYEES
4

4 に答える 4

4

インライン ビューは必要ありません。これは機能します。

select
  min(avg(salary)),
  max(avg(salary))
from
 employees
group by
  dept_id;

http://sqlfiddle.com/#!4/eff67/3

于 2013-05-05T13:02:59.790 に答える
1

サブクエリを使用して、すべての平均給与を取得します。次に、外側のクエリで最小値と最大値を取得できます。

select  min(AvgSalary)
,       max(AvgSalary)
from    (
        select  avg(salary) as AvgSalary
        from    employees
        group by
                department_id
        ) SubQueryAlias
于 2013-05-05T12:59:11.317 に答える
1

まず第一に、EMPLOYEES テーブルのすべてのレコードを返す理由は簡単です。group by は、メインクエリには適用されない内部サブクエリにあるためです。実際には、サブクエリはテーブルの各行ごとに実行され、結果は行ごとに返されます。これはあなたが必要とする正しいクエリだと思います:

SELECT AVG(min_salary) As "Minimum Average salary", AVG(max_salary) As "Maximum Average Salary"
FROM
(SELECT MIN(salary) As min_salary, MAX(salary) AS max_salary
 FROM EMPLOYEES
 GROUP BY department_id
)
于 2013-05-05T12:59:24.383 に答える