sql >> データベース >  >> RDS >> Database

初心者向けSQLMAX()

    SQLでは、MAX() functionは、指定された式の最大値を返す集計関数です。

    以下は、それがどのように機能するかを示すためのいくつかの基本的な例です。

    サンプルテーブル

    次の表があるとします。

    SELECT * FROM Products;

    結果:

    +-------------+------------+---------------------------------+----------------+-----------------------------------------+
    | ProductId   | VendorId   | ProductName                     | ProductPrice   | ProductDescription                      |
    |-------------+------------+---------------------------------+----------------+-----------------------------------------|
    | 1           | 1001       | Left handed screwdriver         | 25.99          | Purple. Includes left handed carry box. |
    | 2           | 1001       | Long Weight (blue)              | 14.75          | Includes a long wait.                   |
    | 3           | 1001       | Long Weight (green)             | 11.99          | Approximate 30 minute waiting period.   |
    | 4           | 1002       | Sledge Hammer                   | 33.49          | Wooden handle. Free wine glasses.       |
    | 5           | 1003       | Chainsaw                        | 245.00         | Orange. Includes spare fingers.         |
    | 6           | 1003       | Straw Dog Box                   | NULL           | Tied with vines. Very chewable.         |
    | 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
    +-------------+------------+---------------------------------+----------------+-----------------------------------------+

    次のクエリを使用して、そのテーブルから最大価格を取得できます。

    SELECT MAX(ProductPrice)
    FROM Products;

    結果:

    +--------------------+
    | (No column name)   |
    |--------------------|
    | 245.00             |
    +--------------------+

    この場合、価格情報はProductPriceに保存されます 列なので、それを引数としてMAX()に渡します。 関数は、結果を計算して返します。

    列エイリアスの使用

    以前の結果には列名が含まれていないことに気付くでしょう。一部のDBMSは、MAX(ProductPrice)のようなものを使用する場合があります 列名として。 MAX()であるため、これは予想されることです。 関数は列を返しません。エイリアスを割り当てることで、列名を簡単に指定できます。

    SELECT MAX(ProductPrice) AS MaximumPrice
    FROM Products;

    結果:

    +----------------+
    | MaximumPrice   |
    |----------------|
    | 245.00         |
    +----------------+

    フィルタリングされた結果

    MAX() 関数は、クエリによって返された行を操作します。したがって、結果をフィルタリングすると、MAX()の結果になります。 それを反映します。

    SELECT MAX(ProductPrice) AS MaximumPrice
    FROM Products
    WHERE VendorId = 1001;

    結果:

    +----------------+
    | MaximumPrice   |
    |----------------|
    | 25.99          |
    +----------------+

    この場合、25.99は、指定されたベンダーが提供するすべての製品の最高価格です。

    NULL

    MAX() 関数はNULLを無視します 値。上記のサンプルテーブルでは、製品番号6 NULLがあります そのProductPrice 列ですが、MAX()では無視されました 例。

    DBMSと設定によっては、NULLという警告が表示される場合と表示されない場合があります。 結果セットから値が削除されました。

    表示される可能性のあるものの例を次に示します。

    SELECT MAX(ProductPrice) AS MaximumPrice
    FROM Products;

    結果:

    +----------------+
    | MaximumPrice   |
    |----------------|
    | 245.00         |
    +----------------+
    Warning: Null value is eliminated by an aggregate or other SET operation.

    これは、列に少なくとも1つのNULLが含まれていることを示しています。 値であり、結果を計算するときに無視されたこと。

    日付/時刻データ

    MAX()を使用できます 日付/時刻の値。

    次の表があるとします。

    SELECT PetName, DOB 
    FROM Pets;

    結果:

    +-----------+------------+
    | PetName   | DOB        |
    |-----------+------------|
    | Fluffy    | 2020-11-20 |
    | Fetch     | 2019-08-16 |
    | Scratch   | 2018-10-01 |
    | Wag       | 2020-03-15 |
    | Tweet     | 2020-11-28 |
    | Fluffy    | 2020-09-17 |
    | Bark      | NULL       |
    | Meow      | NULL       |
    +-----------+------------+

    MAX()を使用できます 最大生年月日を見つけるには(DOB

    SELECT MAX(DOB) AS MaxDOB
    FROM Pets;

    結果:

    +------------+
    | MaxDOB     |
    |------------|
    | 2020-11-28 |
    +------------+

    これは最年少のペットの生年月日です。前述のように、NULLは無視されます 値。

    キャラクターデータ

    文字データ列で使用する場合、MAX() 照合シーケンスで最も高い値を見つけます。

    例:

    SELECT MAX(ProductName) AS MaximumProductName
    FROM Products;

    結果:

    +----------------------+
    | MaximumProductName   |
    |----------------------|
    | Straw Dog Box        |
    +----------------------+

    DISTINCT キーワード

    お使いのDBMSでDISTINCTが許可されている場合があります MAX()で使用されるキーワード 働き。もしそうなら、これはおそらくISOSQL標準に準拠するためです。

    したがって、これを行うことができる場合があります:

    SELECT MAX(DISTINCT ProductPrice) AS MaximumPrice
    FROM Products;

    結果:

    +----------------+
    | MaximumPrice   |
    |----------------|
    | 245.00         |
    +----------------+

    ただし、結果には影響しません。

    DISTINCT キーワードは、他のコンテキスト(COUNT()など)で使用すると非常に便利です。 関数)ですが、MAX()と一緒に使用しても意味がありません 。 DISTINCT キーワードは重複を削除しますが、MAX()の場合 MAX()なので、違いはありません。 同じ最大値を共有する行の数に関係なく、同じ結果を返します。

    ウィンドウ関数

    DBMSによっては、OVERを使用できる場合があります MAX()を含む句 ウィンドウ関数を作成する関数。

    ウィンドウ関数は、一連のクエリ行に対して集計のような操作を実行します。クエリ行ごとに結果が生成されます。これは、クエリ行を単一の結果行にグループ化する集計操作とは対照的です。

    概念を示す例を次に示します。

    Productsはすでに見てきました テーブル。私たちのデータベースにはCustomersもあります テーブルであり、次のデータが含まれています:

    +--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
    | CustomerId   | CustomerName         | PostalAddress     | City       | StateProvince   | ZipCode    | Country   | Phone          |
    |--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
    | 1001         | Palm Pantry          | 20 Esplanade      | Townsville | QLD             | 2040       | AUS       | (308) 555-0100 |
    | 1002         | Tall Poppy           | 12 Main Road      | Columbus   | OH              | 43333      | USA       | (310) 657-0134 |
    | 1003         | Crazy Critters       | 10 Infinite Loops | Cairns     | QLD             | 4870       | AUS       | (418) 555-0143 |
    | 1004         | Oops Media           | 4 Beachside Drive | Perth      | WA              | 1234       | AUS       | (405) 443-5987 |
    | 1005         | Strange Names Inc.   | 789 George Street | Sydney     | NSW             | 2000       | AUD       | (318) 777-0177 |
    | 1006         | Hi-Five Solutionists | 5 High Street     | Highlands  | HI              | 1254       | AUS       | (415) 413-5182 |
    +--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+

    これらのテーブルからデータを取得し、結合を使用して1つの結果セットとして表示できます。

    MAX()を使用することもできます OVERで機能する データにウィンドウ関数を適用する句。

    SELECT 
        v.VendorName,
        p.ProductName,
        p.ProductPrice,
        MAX(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Maximum Price For This Vendor"
    FROM Products p 
    INNER JOIN Vendors v 
    ON v.VendorId = p.VendorId
    ORDER BY VendorName, ProductPrice, "Maximum Price For This Vendor";

    結果:

    +---------------+---------------------------------+----------------+---------------------------------+
    | VendorName    | ProductName                     | ProductPrice   | Maximum Price For This Vendor   |
    |---------------+---------------------------------+----------------+---------------------------------|
    | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99           | 9.99                            |
    | Mars Supplies | Long Weight (green)             | 11.99          | 25.99                           |
    | Mars Supplies | Long Weight (blue)              | 14.75          | 25.99                           |
    | Mars Supplies | Left handed screwdriver         | 25.99          | 25.99                           |
    | Pedal Medals  | Straw Dog Box                   | NULL           | 245.00                          |
    | Pedal Medals  | Chainsaw                        | 245.00         | 245.00                          |
    | Randy Roofers | Sledge Hammer                   | 33.49          | 33.49                           |
    +---------------+---------------------------------+----------------+---------------------------------+

    この場合、OVERを使用しました MAX()を含む句 結果をベンダー名で分割する関数。

    これにより、各製品の価格情報と、その特定のベンダーからのすべての製品の最大価格を返すことができました。この最大価格はベンダーの変更に応じて変更されますが(複数のベンダーが同じ最大価格を持っている場合を除く)、同じベンダーのすべての製品で同じままです。

    この概念は、SUM()などのSQLの他の集計関数にも適用できます。 、MIN()AVG() 、およびCOUNT()


    1. ストアドプロシージャのmysql動的クエリ

    2. SQL Server Management Studio(SSMS)からDDLスクリプト(作成)を生成する方法-SQL Server/TSQLチュートリアルパート17

    3. SQL Serverで「datetimeoffset」を「time」に変換します(T-SQLの例)

    4. MicrosoftAccessデータをExcelに簡単にエクスポートする方法