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

MySQL:nullによる平均化

    SQLの集計関数(SUM、AVG、COUNTなど)は常に自動的にNULLを除外します。

    したがって、SUM(col)/ COUNT(col)=AVG(col)-これは素晴らしく、一貫性があります。

    COUNT(*)の特殊なケースでは、すべての行がカウントされます。

    NULLで式を作成する場合:A + BここでAまたはBのいずれかがNULLの場合、他の列がNULLであるかどうかに関係なく、A+BはNULLになります。

    NULLがある場合、一般に、AVG(A + B)<> AVG(A)+ AVG(B)であり、分母も異なる可能性があります。これを解決するには、AVG(COALESCE(A、0)+ COALESCE(B、0))の列をラップする必要がありますが、COALESCE(A、0)+ COALESCE(B、0)の場合も除外する必要があります。

    あなたのコードに基づいて、私は提案します:

    select avg(coalesce(col1, 0) + coalesce(col2, 0)), count(col3) from table1
    where coalesce(col1, col2) is not null -- double nulls are eliminated
    group by SomeArbitraryCol
    having avg(coalesce(col1, 0) + coalesce(col2, 0)) < 500 and count(col3) > 3
    order by avg(coalesce(col1, 0) + coalesce(col2, 0)) asc;
    


    1. ヘッダー情報を変更できません

    2. MYSQL複数の行に基づいてテーブルから選択

    3. [メールで保護]インストール: `node-pre-gyp install --fallback-to-build`

    4. 新しいMySQLインストールで以前のMySQLデータフォルダを使用する