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

初心者向けのSQLMIN()

    SQLでは、MIN() 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 MIN(ProductPrice)
    FROM Products;

    結果:

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

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

    列エイリアスの使用

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

    SELECT MIN(ProductPrice) AS MinimumPrice
    FROM Products;

    結果:

    +----------------+
    | MinimumPrice   |
    |----------------|
    | 9.99           |
    +----------------+

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

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

    SELECT MIN(ProductPrice) AS MinimumPrice
    FROM Products
    WHERE VendorId = 1001;

    結果:

    +----------------+
    | MinimumPrice   |
    |----------------|
    | 11.99          |
    +----------------+

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

    NULL

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

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

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

    SELECT MIN(ProductPrice) AS MinimumPrice
    FROM Products;

    結果:

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

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

    日付/時刻データ

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

    次の表があるとします。

    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       |
    +-----------+------------+

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

    SELECT MIN(DOB) AS MinDOB
    FROM Pets;

    結果:

    +------------+
    | MinDOB     |
    |------------|
    | 2018-10-01 |
    +------------+

    ここでも、NULLを無視します 値。

    キャラクターデータ

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

    例:

    SELECT MIN(ProductName) AS MinimumProductName
    FROM Products;

    結果:

    +---------------------------------+
    | MinimumProductName              |
    |---------------------------------|
    | Bottomless Coffee Mugs (4 Pack) |
    +---------------------------------+

    DISTINCT キーワード

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

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

    SELECT MIN(DISTINCT ProductPrice) AS MinimumPrice
    FROM Products;

    結果:

    +----------------+
    | MinimumPrice   |
    |----------------|
    | 9.99           |
    +----------------+

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

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

    ウィンドウ関数

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

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

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

    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つの結果セットとして表示できます。

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

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

    結果:

    +---------------+---------------------------------+----------------+---------------------------------+
    | VendorName    | ProductName                     | ProductPrice   | Minimum Price For This Vendor   |
    |---------------+---------------------------------+----------------+---------------------------------|
    | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99           | 9.99                            |
    | Mars Supplies | Long Weight (green)             | 11.99          | 11.99                           |
    | Mars Supplies | Long Weight (blue)              | 14.75          | 11.99                           |
    | Mars Supplies | Left handed screwdriver         | 25.99          | 11.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を使用しました MIN()を含む句 結果をベンダー名で分割する関数。

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

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


    1. MySQLのタイムゾーンを変更しますか?

    2. hibernateでネイティブSQLを実行する

    3. Oracle:ROWNUMをORDERBY句と組み合わせて使用​​してテーブル列を更新する

    4. SQL Serverのクエリ最適化手法:クエリのパフォーマンスを向上させるための5つのベストプラクティス