2016-09-29 12 views
6

私はつまり、SQL関数をグループ化する方法はありますか?

  • MIN(AVG(column_name))
  • またはそのような何か、SQLでグループMIN()AVG()機能にしたいです。

グルーピングの方法はありますか?

私はこの試みた:

SELECT 
     `instructer`.`dept_name`, AVG(`instructer`.`salary`) 
AS 
     MinAvgSalary 
FROM 
     `instructer` 
GROUP BY 
     `instructer`.`dept_name` 
HAVING 
     AVG(`instructer`.`salary`) = (SELECT MIN(AVG(`instructer`.`salary`)) FROM `instructer` GROUP BY `instructer`.`dept_name`) 

をしかし、MySQLは言った:

1111 - グループ機能の使用が無効です。

これは私のインストラクターのテーブルです:

Enter image description here

答えて

1

あなたが最後のクエリでLIMIT 1を使用してみてください副選択

select t.dept_name, min(t.AvgSalary) AS MinAvgSalary 
from (
    SELECT 
    `instructer`.`dept_name` AS dept_name 
    , AVG(`instructer`.`salary`) AS  AvgSalary 
    FROM `instructer` 
    GROUP BY `instructer`.`dept_name`) t 
GROUP BY t.dept_name 
HAVING t.AvgSalary = min(t.AvgSalary) 
1

を使用することができます。

SELECT 
     `instructer`.`dept_name`, AVG(`instructer`.`salary`) 
AS 
     MinAvgSalary 
FROM 
     `instructer` 
GROUP BY 
     `instructer`.`dept_name` 
HAVING 
     AVG(`instructer`.`salary`) = 
    (SELECT AVG(`instructer`.`salary`) as AvgSalary 
     FROM `instructer` 
     GROUP BY `instructer`.`dept_name` 
     ORDER BY AvgSalary LIMIT 1) 
0

他の人が動作しない場合は、私はこれに長い道のりをしました。各部門の平均給与を保持する2つの平均給与テーブル(av1、av2)を作成します。次に、新しいテーブルのav1の最小給与(min1)を選択します。次に、給料にmin1とav2を加算します。あなたは最低賃金を持っているAV2のレコードを見つける必要がありますし、あなたにも、そこから部門名を引くことができます:ここでテスト

SELECT av2.dept_name, av2.avsal 
FROM 
(SELECT MIN(avsal) as minsal 
FROM 
(SELECT dept_name, AVG(salary) as avsal 
    FROM instructor 
    GROUP BY dept_name) av1) min1 
INNER JOIN 
(SELECT dept_name, AVG(salary) as avsal 
FROM instructor 
GROUP BY dept_name) av2 
ON min1.minsal = av2.avsal 

http://sqlfiddle.com/#!9/77b0ac

関連する問題