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

SQLServerのMINおよびMAX集計関数

    SQLServerの機能

    一般的なデータベースシステム、特にSQL Serverでは、関数はゼロまたは1つの入力を受け取り、単一の出力または配列を返すコードの断片です。

    通常はユーザー定義のテーブル値関数は配列を返すことができますが、組み込みのSQLServer関数は通常スカラー値関数です。 SQL Serverの3番目のクラスの関数は、集計値関数です。 MINおよびMAXSQLServer関数は集計値関数です。

    ウィンドウ関数は比較的新しいクラスです。集計関数のように計算を実行しますが、現在の行に関連する一連の行に対して計算を実行します。集計関数は列を操作することで単一の結果を生成する可能性がありますが、ウィンドウ関数は各行の結果を生成する可能性が高くなります。

    SQL Server関数の分類は、データ型(文字列関数、数値関数、および日付関数)に基づいて行うこともできます。文字列関数は文字列値(LENGTH()など)で動作すると推測できます。

    最小値と最大値

    MIN関数とMAX関数は、非常に単純な集計関数です。それでも、彼らは私たちが扱っているデータセットに応じてさまざまな質問に答えることができます。

    たとえば、SELECTステートメントを発行すると、SQLServerに質問を要求します。 。したがって、クエリを実行していると言います。 。列の最小値と最大値についてSQLServerに問い合わせるには、次の構文を使用します。

    SELECT MIN(column_name) FROM table_name;
    SELECT MAX(column_name) FROM table_name;

    この構文を使用すると、SQLServerは単一の値を返します。したがって、MIN()関数とMAX()関数のスカラー値関数を検討できます。

    リスト1は、 Sales.Ordersから貨物重量の最小値と最大値を導出するための簡単なステートメントを示しています。 ItzikBenganのTSQLV4の表 データベース:

    -- Listing 1: Basic MIN() and MAX() Function Queries
    USE TSQLV4
    GO
    SELECT * FROM [Sales].[Orders];
    
    -- Without Column Aliases
    SELECT MIN(freight) FROM [Sales].[Orders];
    SELECT MAX(freight) FROM [Sales].[Orders];
    -- Without Column Aliases
    SELECT MIN(freight) min_freight FROM [Sales].[Orders];
    SELECT MAX(freight) max_freight FROM [Sales].[Orders];
    

    グループ化

    「国ごとの最小および最大の貨物重量はどれくらいですか?」 この質問に答えるには、 GROUP BYが必要です。 句。例は以下のリスト2にあります。

    クエリは最初にデータをshipcountry、でグループ化します 次に、国ごとにそれぞれ最小および最大の貨物重量を返します。これは、リストの最後のクエリ(検証)を発行することで確認できます。

    -- Listing 2: MIN and MAX Freight By Country
    -- Minimum by Country
    SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
    GROUP BY shipcountry;
    
    -- Maximum by Country
    SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
    GROUP BY shipcountry;
    
    -- Validation
    SELECT * FROM [Sales].[Orders] WHERE shipcountry='Finland'
    ORDER BY freight;
    
    -- Listing 2: MIN and MAX Freight by Country
    -- Minimum by Customer
    SELECT custid, MIN(freight) min_freight FROM [Sales].[Orders]
    GROUP BY custid;
    
    -- Maximum by Customer
    SELECT custid, MAX(freight) max_freight FROM [Sales].[Orders]
    GROUP BY custid;
    
    
    -- Validation
    SELECT * FROM [Sales].[Orders] WHERE custid='23'
    ORDER BY freight;
    

    図3に結果を示します。別の列で同様のことを行うことができます– custid 桁。この場合、「各顧客の最小および最大の恐怖は何ですか?」という質問に答えています。

    その他の質問

    データをさらに詳しく調べて、貨物の重量が1未満または800を超える国を見つけることができます。これは HAVINGを使用して行います。 GROUP BYによってグループにセグメント化された結果セットをフィルタリングする句 条項。

    -- Listing 3: Introducing the HAVING Clause
    SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
    GROUP BY shipcountry
    HAVING MIN(freight)<1;
    
    SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
    GROUP BY shipcountry
    HAVING MAX(freight)>800;
    

    日付の操作

    MIN()関数とMAX()関数を日付に適用すると、最も早いが表示されると予想されます。 および最新 それぞれ日付。例を見てください–日付はSQLServerの内部で整数として保存されます。

    -- Listing 4: Working with Dates
    SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
    SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];
    

    どの顧客が最初の注文をし、どの顧客が最後の注文をしたかを尋ねることで、より深く掘り下げることができます。そのために、リスト5のコードを使用しています。図6は、 custid 85人の顧客が最初の注文を実行し、 custid 9人の顧客が最新の注文をしました。

    -- Listing 5: Customer Order Dates
    SELECT custid, MIN(orderdate) earliest_date FROM [Sales].[Orders]
    GROUP BY custid
    ORDER BY earliest_date;
    
    SELECT custid, MAX(orderdate) latest_date FROM [Sales].[Orders]
    GROUP BY custid
    ORDER BY latest_date desc;
    

    結論

    この記事では、SQL ServerでのMIN()およびMAX()集計関数の使用について簡単に説明しました。これらの関数の役割は、テーブルの列に格納されている特定の範囲の最小値と最大値を返すことです。

    これらの関数をGROUPBY、ORDER BY、HAVING句などの他のT-SQLコマンドと組み合わせることで、これらの関数を使用してさらに多くの質問に答えることができます。

    多くのツールがそのようなタスクのパフォーマンスを簡素化および加速し、要件を満たす任意のソリューションを選択できます。その中で、DevartのSQL Completeは必要なすべての操作を実行し、グリッドで選択された値のMIN、MAX、およびAVGを計算するインプレースSSMSグリッド集約機能を提供します。


    1. SQLServerでGUIを使用して列を追加または削除する方法-SQLServer/T-SQLチュートリアルパート39

    2. データベースセキュリティのためのMariaDB監査プラグインの使用

    3. OracleのREPLACE()関数

    4. DBに接続せずにmysql_real_escape_stringの代わりに