首頁 > 軟體

mysql如何分組統計並求出百分比

2022-10-14 14:04:01

mysql分組統計並求出百分比

1、mysql 分組統計並列出百分比

SELECT
    point_id,
    pname_cn,
    play_num,
    round( play_num / total * 100, 2 ) as `ratio`
FROM
    (
    SELECT
        * 
    FROM
        ( SELECT 
                ANY_VALUE ( `point_id` ) AS point_id, 
                ANY_VALUE ( `pname_cn` ) AS pname_cn,  
                sum( `play` ) AS play_num  
            FROM 
                `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05'  GROUP BY `point_id`  ) t1
            INNER JOIN 
            ( SELECT 
                    sum( `play` ) AS total 
                FROM 
                    `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05'
            ) t2 ON 1 = 1 
    ) t
     
ORDER BY
    `play_num` DESC 
    LIMIT 0, 10;

--查出符合條件並且分組, 統計出每組數量

SELECT 
    ANY_VALUE ( `point_id` ) AS point_id, 
    ANY_VALUE ( `pname_cn` ) AS pname_cn,  
    sum(`like`) as like_num
FROM 
    `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05'  GROUP BY `point_id`  ) t1

--查出符合條件,總數量

(SELECT 
    sum( `play` ) AS total 
FROM 
    `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05'
) t2

2、按年齡段分組,並求個年齡段佔比

SELECT
    age_group,
    age_total,
    round( age_total / total * 100, 2 ) as `ratio`
FROM
    (
       SELECT
        * 
    FROM
        ( SELECT 
               SUM(total) AS age_total,
                   CASE
                    WHEN age >= 0 AND age < 18 THEN '18歲以下'
                    WHEN age >= 18 AND age <= 25 THEN '18歲到25歲'
                    WHEN age >= 26 AND age <= 35 THEN '26歲到35歲'
                    WHEN age >= 36 AND age <= 45 THEN '36歲到45歲'
                    WHEN age >= 46 AND age <= 60 THEN '46歲到60歲'
                   ELSE '60歲以上' END
                AS age_group FROM dt_collect_age WHERE `add_time` BETWEEN ".$time[0]." AND ".$time[1]." GROUP BY age_group
        ) t1
        INNER JOIN 
            ( SELECT 
                   SUM( `total` ) AS total 
               FROM 
                `dt_collect_age` WHERE `add_time` BETWEEN ".$time[0]." AND ".$time[1]."
            ) t2 ON 1 = 1 
           ) t
    LIMIT 0, 6;

mysql求百分比的幾種方法

函數介紹

1、ROUND(X,D)和ROUND(X)

round函數用於資料的四捨五入,x指要處理的數,d是指保留幾位小數

round(x)  ,其實就是 round(x,0)

d可以是負數,代表指定小數點左邊的d位整數位為0,同時小數位均為0

2、FORMAT(X,D)

提供資料內容格式化功能,可以格式化資料為整數或者浮點數,能四捨五入

D為負數時,按0處理

3、LEFT(str,len)

left函數是一個字串函數,它返回具有指定長度的字串的左邊部分,str為要處理的字串,len為長度

left函數為字串擷取,不能四捨五入

4、CONCAT(str1,str2,...)

concat函數用於將多個字串連線成一個字串

利用round,format,left與concat求百分比

注意:使用left按位元擷取百分比時,位數要根據需要合理設定,否則容易出現意外BUG

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com