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

日ごとにグループ化された中央値を数える

    自分を緩めたり、物事を複雑にしすぎたりしないことを願っていますが、私が思いついたのは次のとおりです。

    SELECT sq.created_at, avg(sq.price) as median_val FROM (
    SELECT t1.row_number, t1.price, t1.created_at FROM(
    SELECT IF(@prev!=d.created_at, @rownum:=1, @rownum:[email protected]+1) as `row_number`, d.price, @prev:=d.created_at AS created_at
    FROM mediana d, (SELECT @rownum:=0, @prev:=NULL) r
    ORDER BY created_at, price
    ) as t1 INNER JOIN  
    (
      SELECT count(*) as total_rows, created_at 
      FROM mediana d
      GROUP BY created_at
    ) as t2
    ON t1.created_at = t2.created_at
    WHERE 1=1
    AND t1.row_number>=t2.total_rows/2 and t1.row_number<=t2.total_rows/2+1
    )sq
    group by sq.created_at
    

    ここで行ったことは、主に、日付が変更されたときに行番号を1にリセットし(created_atで並べ替えることが重要です)、日付を含めてグループ化できるようにすることです。合計行を計算するクエリには、created_atも含めたので、2つのサブクエリを結合できます。



    1. SQLite Ifnull()のしくみ

    2. 電子メールを受信したときにスクリプトを実行する最も簡単な方法は何ですか?

    3. 別のテーブルからのMYSQLの順序

    4. SQLiteクエリ例外AndroidStudio構文エラーコード1