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

MySQLで中央値を計算する簡単な方法

    MariaDB / MySQLの場合:

    SELECT AVG(dd.val) as median_val
    FROM (
    SELECT d.val, @rownum:[email protected]+1 as `row_number`, @total_rows:[email protected]
      FROM data d, (SELECT @rownum:=0) r
      WHERE d.val is NOT NULL
      -- put some where clause here
      ORDER BY d.val
    ) as dd
    WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );
    

    スティーブコーエン 最初のパスの後、@rownumには行の総数が含まれることを指摘します。これは中央値を決定するために使用できるため、2回目のパスや参加は必要ありません。

    また、AVG(dd.val) およびdd.row_number IN(...) レコードの数が偶数の場合に中央値を正しく生成するために使用されます。理由:

    SELECT FLOOR((3+1)/2),FLOOR((3+2)/2); -- when total_rows is 3, avg rows 2 and 2
    SELECT FLOOR((4+1)/2),FLOOR((4+2)/2); -- when total_rows is 4, avg rows 2 and 3
    

    最後に、MariaDB10.3.3+にはMEDIAN関数が含まれています



    1. VisualStudio2017インストーラープロジェクトを使用したSQLServer名前付きインスタンス

    2. WHERE句を使用して配列をクエリに渡す

    3. Java:PreparedStatementを使用してMySQLに複数の行を挿入します

    4. 一般的なクエリを列として保存しますか?