5

すべての部門の平均賃金を取得し、平均賃金が最も高い部門のみを表示することになっています。このクエリを見つけましたが、機能しません。アイデアはありますか?

SELECT department, max(avg(wage))
FROM employees
GROUP BY department;

次のエラーが表示されます: ERROR at line 1: ORA-00937: not a single-group group function

4

4 に答える 4

7

CTE がなければ、次のことができます。

Select Z.Department, Z.AvgWage
From  (
        Select Department, Avg(Wage) AvgWage
        From Employees
        Group By Department
        ) As Z
Where AvgWage = (
                Select Max(Z1.AvgWage)
                From    (
                        Select Department, Avg(Wage) AvgWage
                        From Employees
                        Group By Department
                        )  Z1
                )

CTE を使用すると、次のことができます。

With AvgWages As
    (
    Select Department
        , Avg(Wage) AvgWage
        , Rank() Over( Order By Avg(Wage) Desc ) WageRank
    From Employees
    Group By Department
    )
Select Department, AvgWage, WageRank
From AvgWages
Where WageRank = 1
于 2010-03-13T19:24:10.597 に答える
3

これは機能しますか:

select *
from
(
  SELECT 
      department
      , avg(wage) as ave_wage
  FROM employees 
  GROUP BY department
)x 
order by ave_wage desc 
where rownum < 2;

(免責事項:完全にテストされていないため、rownumビットを間違った場所に置いた可能性があります)

于 2010-03-13T19:09:25.670 に答える
2

以下のクエリは他の回答と同じ結果を示していますが、代わりにどのように実行できるかをユーザーに示すのは良いことです:

--Method 1 (Davek's select of 1st row over Order by) Brilliant!
--Method 2 (Thomas' where = sub-query result)
--Method 3 (Thomas' based on ranking)

--Method 4 (Inner join sub-queries)
select distinct a.department, a.wage from 
         (select distinct department, AVG(wage) as wage from employees group by department) as a
   inner join 
         (select Max(wage) as wage from
                (select distinct department, AVG(wage) as wage from employees group by department) as x) as b
   on a.wage = b.wage 
where a.wage = b.wage 

--Method 5 (AVG wage in (sub-query))
select distinct a.department, a.wage
from (select distinct department, AVG(wage) as wage from employees group by department) as a
Where a.wage in 
    (select Max(wage) as wage from
        (select distinct department, AVG(wage) as wage from employees group by department) as x)

この選択のカスタム関数も楽しみにしています:)

于 2013-11-27T13:57:33.560 に答える
0

グーグルで...

原因: SELECT リストには、グループ関数 (AVG、COUNT、MAX、MIN、SUM、STDDEV、または VARIANCE など) と個々の列式の両方を含めることはできません。ただし、個々の列式が GROUP BY 句に含まれている場合を除きます。

処置: SELECTリストからグループ関数または個々の列式を削除するか、リストされたすべての個々の列式を含むGROUP BY句を追加してください。

于 2010-03-13T19:08:32.800 に答える