1. 程式人生 > 其它 >資料分析常用sql

資料分析常用sql

1、Mysql

coalesce(), with rollup

select coalesce(t.name,''),sum(t.v) from (select '小麗' as name,1 as v UNION ALL select '小麗' as name,2 as v ) t group by t.name with ROLLUP

分組top N 視窗函式裡不能用聚合函式

  本篇介紹的三個函式均MySQL 8.x 以上版本,8.x以下版本會報語法錯誤,屬於正常現象。MySQL 8.x 實際上就是MySQL 5.8x,大概是為了通過更大版本型號數字,證明自己比友商先進吧。

欄位解釋:D2 商品分類,gmv,g_name 商品名稱

需求:求每個商品分類 gmv 銷售前N

步驟一: 計算彙總商品 GMV

SELECT sum( xgmv ) gmv, g_name, D2 FROM tb_tmp_name GROUP BY D2, g_name 

步驟二:

rank() over (parition by D2 order by GMV DESC ) rn 組內排序

步驟二:

rank() over (parition by D2 order by GMV DESC ) rn 組內排序

 SELECT
        t.*,
        rank() over ( PARTITION BY D2 ORDER BY gmv DESC ) rn 
    FROM
        ( SELECT sum( xgmv ) gmv, g_name, D2 FROM tb_tmp_name GROUP BY D2, g_name ) t 

步驟三:

rank() over (order by GMV DESC ) rn 整組排序,沒有Parition by 分組 那就預設一個數據組

整理如下:

SELECT
    *,
    ROW_NUMBER() over ( ORDER BY gmv DESC ) rnn 
FROM
    (
    SELECT
        t.*,
        rank() over ( PARTITION BY D2 ORDER BY gmv DESC ) rn 
    FROM
        ( SELECT sum( xgmv ) gmv, g_name, D2 FROM tb_tmp_name GROUP BY D2, g_name ) t 
    ) n 
WHERE
    rn 
< 3 ORDER BY gmv DESC

最後效果如下:

1.2

RANK() OVER(業務邏輯)

作用:查出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。

說明:例如學生排名,使用這個函式,成績相同的兩名是並列,下一位同學空出所佔的名次。即:1 1 3 4 5 5 7

DENSE_RANK() OVER(業務邏輯)

作用:查出指定條件後的進行排名,條件相同排名相同,排名間斷不連續。

說明:和rank() over 的作用相同,區別在於dense_rank() over 排名是密集連續的。例如學生排名,使用這個函式,成績相同的兩名是並列,下一位同學接著下一個名次。即:1 1 2 3 4 5 5 6

ROW_NUMBER() OVER(業務邏輯)

作用:查出指定條件後的進行排名,條件相同排名也不相同,排名間斷不連續。

說明:這個函式不需要考慮是否並列,即使根據條件查詢出來的數值相同也會進行連續排序。即:1 2 3 4 5 6

2、Presto

紙上得來終覺淺,絕知此事要躬行。