SQL Max()関数は、SQLの集約関数です。この関数は、条件の大きい方の値を返します。条件は数値の場合もあれば、文字列式の場合もあります。
select max関数の構文:
SELECT MAX(column_name) FROM table_name WHERE conditions;
SQLSELECTMAXについて詳しく見ていきましょう。
次のデータを持つ既存のテーブルについて考えてみます。
テーブル名:従業員
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | ジャイプール | FMW | 2 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ジャイプール | FMW | 2 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト | 4 |
例1: 従業員のテーブルから従業員の最高給与を検索するクエリを実行します。
SELECT MAX (SALARY) AS 'MAXSALARY' FROM EMPLOYEES;
上記のクエリでは、従業員のテーブル全体から最大給与を見つけます。 Max(給与)関数をmaxsalaryと名付けました。出力が返されるときに、給与が列名として表示されます。
出力:
MAX SALARY |
65500 |
ご覧のとおり、従業員のテーブルからの最高給与は65500です
例2: クエリを実行して、居住都市がムンバイである従業員の最高給与を従業員のテーブルから検索します。
SELECT CITY, MAX(SALARY) AS 'SALARY' FROM EMPLOYEES WHERE CITY = 'MUMBAI';
上記のクエリでは、max(salary)をsalaryとして指定し、出力が返されるときに列名として表示されます。ムンバイで従業員の最高給与を見つけ、都市名を表示しました。
出力:
CITY | 給与 |
ムンバイ | 60500 |
ご覧のとおり、ムンバイ市に住む従業員の最高給与は60500です
例3: 部門がJavaである従業員の従業員テーブルから従業員の最高給与を見つけるためのクエリを記述します。
SELECT DEPARTMENT, MAX(SALARY) AS 'MAXIMUM_SALARY' FROM EMPLOYEES WHERE DEPARTMENT = 'JAVA';
上記のクエリでは、max(salary)をmaximum_salaryとしてエイリアス化し、出力が返されるときに列名として表示されます。部門がJavaである従業員の最高給与を見つけ、部門名を表示しました。
出力:
DEPARTMENT | MAXIMUM_SALARY |
JAVA | 58500 |
ご覧のとおり、Java部門の従業員の最高給与は58500です
例4: 部門にリストの1つが含まれている従業員の最大給与が従業員のテーブルからOracleとFMWであることを見つけるためのクエリを記述します。
SELECT MAX(SALARY) AS 'SALARY' FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW');
上記のクエリではmax(salary)のエイリアスを作成しており、出力が返されるときに列名として表示されます。オラクルとFMWを部門とする従業員の最高給与を見つけました。
出力:
SALARY |
65500 |
例5: クエリを実行して、給与が55000を超え、都市に従業員のテーブルグループからデリーのノイダが含まれる従業員の最大給与を都市別に検索します。
SELECT CITY, MAX(SALARY) AS EMPLOYEE_SALARY FROM EMPLOYEES WHERE SALARY > 55000 AND CITY IN ('NOIDA', 'DELHI') GROUP BY CITY;
上記のクエリでは、Max(給与)にEMPLOYEE_SALARYという名前を付けており、出力が返されるときに列名として表示されます。給与が55000を超える従業員の最大給与が見つかりました。また、従業員の都市は、cityINパラメーターに含まれる名前の1つである必要があります。また、GROUPBY句の後にcity列を使用しました。ノイダ市は、ノイダにある市が従業員の給与を見つけたすべての従業員の1つの市にグループ化され、同じアプローチがデリー市にも使用されます。
出力:
CITY | EMPLOYEE_SALARY |
デリー | 60000 |
NOIDA | 60000 |
従業員はデリー市に居住し、最高給与は60000であり、従業員はノイダ市に居住し、最高給与は60000です。
例6: クエリを実行して、従業員のテーブルから最大従業員給与を検索します。都市は、部門ごとにグループ化された従業員に固有です。
SELECT CITY, MAX(DISTINCT SALARY) AS 'EMPLOYEE_SALARY' FROM EMPLOYEES GROUP BY DEPARTMENT;
上記のクエリでは、max(DISTINCT salary)をEmployee_salaryと名付けており、出力が返されるときに列名として表示されます。部門ごとのグループ内の一意の都市を考慮して、従業員の表から最大の従業員給与を見つけました。
出力:
DEPARTMENT | EMPLOYEE_SALARY |
NOIDA | 60000 |
ジャイプール | 65500 |
PUNE | 58500 |
PUNE | 65500 |
ムンバイ | 60500 |
例7: 部門ごとにグループ化された従業員の一意の部門の従業員のテーブルから最大従業員給与を見つけるためのクエリを記述します。
SELECT DEPARTMENT, MAX(DISTINCT SALARY) AS 'EMPLOYEE_SALARY' FROM EMPLOYEES GROUP BY DEPARTMENT;
上記のクエリでは、max(DISTINCT salary)をEmployee_salaryとしてエイリアス化し、出力が返されるときに列名として表示されます。部門の列ごとにグループ化された固有の部門を考慮して、従業員の表から最大の従業員給与を見つけました。
出力:
DEPARTMENT | EMPLOYEE_SALARY |
C# | 60000 |
FMW | 65500 |
JAVA | 58500 |
ORACLE | 65500 |
テスト | 60500 |
例8: クエリを実行して、max()給与が55000を超える部門ごとに、従業員のテーブルグループから従業員の最大給与を検索します。
SELECT CITY, MAX(SALARY) AS SALARY FROM EMPLOYEES GROUP BY DEPARTMENT HAVING MAX(SALARY) > 55000;
上記のクエリでは、max(salary)をsalaryとして指定し、出力が返されるときに列名として表示されます。従業員のテーブルの後に部門名が続くグループから最大従業員給与を見つけ、max()が55000より大きい条件で使用しました。
出力:
DEPARTMENT | EMPLOYEE_SALARY |
NOIDA | 60000 |
ジャイプール | 65500 |
PUNE | 58500 |
PUNE | 65500 |
ムンバイ | 60500 |
ご覧のとおり、給与総額が55000を超える都市のみです。句を持つことはwhere句に似ています。集計関数に何らかの条件を適用する場合は、句を使用します。クエリで集計関数を使用した場合にのみ、having句を使用しました。
例9: 部門ごとのラップトップグループで従業員の最高給与を見つけるためのクエリを作成します。
SELECT DEPARTMENT, MAX(SALARY) AS SALARY FROM EMPLOYEES WHERE EMPLOYEEID IN (SELECT EMPLOYEEID FROM LAPTOP) GROUP BY DEPARTMENT;
上記のクエリでは、max(salary)をsalaryとして指定し、出力が返されるときに列名として表示されます。上記のクエリの説明、最初のサブクエリが実行されます(SELECT EMPLOYEEID FROM LAPTOP);その結果、null値を含む従業員IDを取得します。サブクエリが実行された後、メインクエリが実行されますSELECT DEPARTMENT、MAX(SALARY)AS SALARY FROM EMPLOYEES WHERE EMPLOYEEID IN(サブクエリの出力)。メインクエリのIN演算子には、IN演算子に従ってサブクエリから出力される従業員のIDがあります。部門名ごとのグループである最終結果が得られます。
出力:
DEPARTMENT | 給与 |
C# | 60000 |
JAVA | 58500 |
ORACLE | 60000 |
テスト | 55500 |