mysql如何分組統(tǒng)計并求出百分比
mysql分組統(tǒng)計并求出百分比
1、mysql 分組統(tǒng)計并列出百分比
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;
--查出符合條件并且分組, 統(tǒng)計出每組數(shù)量
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
--查出符合條件,總數(shù)量
(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求百分比的幾種方法
函數(shù)介紹
1、ROUND(X,D)和ROUND(X)
round函數(shù)用于數(shù)據(jù)的四舍五入,x指要處理的數(shù),d是指保留幾位小數(shù)
round(x) ,其實就是 round(x,0)
d可以是負數(shù),代表指定小數(shù)點左邊的d位整數(shù)位為0,同時小數(shù)位均為0
2、FORMAT(X,D)
提供數(shù)據(jù)內容格式化功能,可以格式化數(shù)據(jù)為整數(shù)或者浮點數(shù),能四舍五入
D為負數(shù)時,按0處理
3、LEFT(str,len)
left函數(shù)是一個字符串函數(shù),它返回具有指定長度的字符串的左邊部分,str為要處理的字符串,len為長度
left函數(shù)為字符串截取,不能四舍五入
4、CONCAT(str1,str2,...)
concat函數(shù)用于將多個字符串連接成一個字符串
利用round,format,left與concat求百分比
注意:使用left按位截取百分比時,位數(shù)要根據(jù)需要合理設置,否則容易出現(xiàn)意外BUG
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于C++實現(xiàn)Mysql數(shù)據(jù)庫連接池實例
數(shù)據(jù)庫連接池負責分配、管理、和釋放數(shù)據(jù)庫連接,允許使用應用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接。數(shù)據(jù)庫連接是關鍵有限且昂貴的資源,一個數(shù)據(jù)庫連接對象均對應一個物理數(shù)據(jù)庫的連接,每次操作都打開一個物理連接,使用完都關閉連接2022-12-12關于 MySQL 嵌套子查詢中無法關聯(lián)主表字段問題的解決方法
這篇文章主要介紹了關于 MySQL 嵌套子查詢中,無法關聯(lián)主表字段問題的折中解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12詳解監(jiān)聽MySQL的binlog日志工具分析:Canal
Canal主要用途是基于MySQL數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費,目前主要支持MySQL。接下來通過本文給大家介紹監(jiān)聽MySQL的binlog日志工具分析:Canal的相關知識,感興趣的朋友一起看看吧2020-10-10詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化
這篇文章主要介紹了MySQL中的數(shù)據(jù)類型和schema優(yōu)化的相關資料,幫助大家更好的理解和學習MySQL的知識,感興趣的朋友可以了解下2020-10-10