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

DISTINCTキーワードを使用してSQLiteでAvg()の結果を微調整します

    avg()について知っている場合 SQLiteの関数を使用すると、NULL以外のすべてのXの平均を返すことをご存知でしょう。 グループ内。

    しかし、DISTINCTを追加できることをご存知でしたか この関数のキーワード?

    DISTINCTを追加した場合 キーワード、avg() 個別の値のみに基づいて結果を計算します。これは基本的に、重複する値を削除してから残りの値の平均を計算することと同じです。

    構文

    DISTINCTを使用するには キーワードの場合、最初の引数として挿入するだけです。

    このように:

    avg(DISTINCT X)

    ここでX 平均を計算する列名です。

    Productsという次の表を見てください :

    ProductId   ProductName    Price     
    ----------  -------------  ----------
    1           Widget Holder  139.5     
    2           Blue Widget    10.0      
    3           Red Widget     10.0      
    4           Green Widget   10.0      
    5           Widget Stick   89.75     
    6           Foo Cap        11.99     

    通常のavg()を実行した場合 [価格]列:

    SELECT avg(Price) FROM Products;

    これが私が得るものです:

    45.2066666666667

    しかし、DISTINCTを実行すると クエリ:

    SELECT avg(DISTINCT Price) FROM Products;

    私はこれを手に入れました:

    62.81

    したがって、この場合、結果が大幅に変わります。

    明確にするために、ここではそれらを並べています:

    SELECT 
     avg(Price) AS "Non-Distinct",
     avg(DISTINCT Price) AS "Distinct"
    FROM Products;

    結果:

    Non-Distinct      Distinct  
    ----------------  ----------
    45.2066666666667  62.81     

    ご想像のとおり、DISTINCTを使用します avg()を含むキーワード 特に範囲の一方の端に多数の重複があるが、もう一方の端には多くの重複がない場合、結果が大幅に歪む可能性があります。


    1. 重複する日付範囲を削除して削減します

    2. レコードがまだ存在しない場合、レコードを挿入するためのベストプラクティスは何ですか?

    3. PythonでOracle関数を呼び出す方法は?

    4. C#でSQLクエリを直接実行する方法は?