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()
。