MySQL8の新機能 - ウィンドウ関数

MySQL 8.0 は、分析関数としても知られるウィンドウ関数 (Window Function) をサポートしています。ウィンドウ関数はグループ化集計関数に似ていますが、データの行ごとに 1 つの結果を生成します。集計ウィンドウ関数: SUM /AVG / COUNT /MAX/MIN など。

ケースは次のとおりです。売上テーブルの構造とデータは次のとおりです。

共通のグループ化、集計(国別統計)

SELECT country,sum(sum)
FROM sales
GROUP BY country
order BY country;

窓口機能(国別まとめ)

select year,country,product,sum,
    sum(sum) over (PARTITION by country) as country_sum
 from sales
order by country,year,product,sum;

ウィンドウ関数(タイ値を計算)

select year,country,product,sum,
            sum(sum) over (PARTITION by country) as country_sum,
            avg(sum) over (PARTITION by country) as country_avg
 from sales
order by country,year,product,sum;

専用ウィンドウ機能:

  • シリアル番号関数: ROW_NUMBER()、RANK()、DENSE_RANK()

  • 分布関数: PERCENT_RANK()、CUME_DIST()

  • フロント関数とバック関数: LAG()、LEAD()

  • 先頭関数と末尾関数: FIRST_VALUE()、LAST_VALUE()

  • その他の関数: NTH_VALUE()、NTILE()

窓関数(ランキング)

カテゴリの順位を計算するランキングウィンドウ関数と、指定した位置のデータを取得するバリューウィンドウ関数

SELECT
    YEAR,
    country,
    product,
    sum,
    row_number() over (ORDER BY sum) AS 'rank',
        rank() over (ORDER BY sum) AS 'rank_1'
FROM
    sales;

SELECT
    YEAR,
    country,
    product,
    sum,
    sum(sum) over (PARTITION by country order by sum rows unbounded preceding) as sum_1
FROM
    sales order by country,sum;

もちろん、実行できる操作はたくさんあります。詳細については、公式 Web サイトを参照してください。

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html

おすすめ

転載: blog.csdn.net/m0_70299172/article/details/130496398