1

私はMySQLを学んでいて、クエリで簡単な算術演算をしようとしています。給与平均が最も高い部門を特定して部門名を取得しようとしています。ProfessorsTableしかし、外部キーを使用してテーブルにアクセスする方法がわかりません 。誰でもこれで私を助けることができますか?ありがとうございました!

これは私が試したことです:

 SELECT Department FROM ProfessorsTable WHERE max(AVG(Salary));

以下は私の2つのテーブルです:

 CREATE TABLE DepartmentsTable
 (
   Department VARCHAR(50) NOT NULL,
   Faculty VARCHAR(50) NOT NULL,
   Building VARCHAR(50) NOT NULL,
   CONSTRAINT PRIMARY KEY (Department)
 ) type = InnoDB;

 CREATE TABLE ProfessorsTable
 (
   Name VARCHAR(50) NOT NULL,
   Department VARCHAR(50) NOT NULL,
   Rank VARCHAR(50) NOT NULL,
   Salary INT UNSIGNED NOT NULL,
   CONSTRAINT FOREIGN KEY (Department) REFERENCES DepartmentsTable(Department), 
   CONSTRAINT PRIMARY KEY (Name, Department)
 ) type = innoDB;
4

2 に答える 2

2

すべての部門の平均給与を取得します。. .

SELECT Department, avg(Salary) AS avg_salary
FROM ProfessorsTable 
GROUP BY Department
ORDER BY avg_salary DESC;

平均が最も高い部門のみを取得します。. .

SELECT Department, avg(Salary) AS avg_salary
FROM ProfessorsTable 
GROUP BY Department
ORDER BY avg_salary DESC LIMIT 1;
于 2013-05-12T00:17:22.287 に答える
1

あなたがやりたいことをするために、ワークフローは次のようになります:

給与が最も高い教授の学科名を選択します。したがって、教授を給与でソートし、リストの最初 (給与が最も高い) を選択してから、その教授の学部を返します。

これを試して:

SELECT Department FROM ProfessorsTable ORDER BY Salary DESC LIMIT 1;

編集:

元の質問を読み間違えました。給与が最も高い部門の部門名を取得する方法は次のとおりです。

SELECT Department FROM ProfessorsTable GROUP BY Department ORDER BY AVG(salary) DESC LIMIT 1;

ただし、基本的な考え方は同じです。最初に平均給与でソートし、次に最初の結果のみを保持することを選択します。

于 2013-05-11T23:36:59.370 に答える