ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL高阶SQL语句三(简单的统计计算)

2021-09-12 03:02:15  阅读:256  来源: 互联网

标签:count Name SQL Sales A1 A2 MySQL 高阶 select


 

排名的计算

表格自我连接(self join),然后将结果依序列出,算出每一行之前(包括那一行本身)有多少行数

select A1.Name, A1.Sales, count(A2.Sales) rank from Total_Sales A1, Total_Sales A2
    -> where A1.Sales < A2.Sales or (A1.Sales=A2.Sales and A1.Name=A2.Name)
    -> group by A1.Name, A1.Sales order by A1.Sales desc;

  

 

中位数的计算

方法一:使用派生表

select Name, Sales Middle from (select A1.Name,A1.Sales,count(A2.Sales) rank from Total_Sales A1,Total_Sales A2
    -> where A1.Sales < A2.Sales or (A1.Sales = A2.Sales and A1.Name >= A2.Name)
    -> group by A1.Name, A1.Sales order by A1.Sales desc) A3
    -> where A3.Rank = (select (count(*)+1) div 2 from Total_Sales);

  

#每个派生表必须有自己的别名,所以别名A3必须要有 #DIV是在MySQL中算出商的方式

 

方法二:使用视图表

create view V_1 as select A1.Name,A1.Sales,count(A2.Sales) rank from Total_Sales A1,Total_Sales A2 where A1.Sales < A2.Sales or (A1.Sales = A2.Sales and A1.Name >= A2.Name) group by A1.Name, A1.Sales order by A1.Sales desc;

select Name,Sales Middle from V_1 where Rank = (select (count(*)+1) div 2 from Total_Sales);

  

 

累积总计的计算

表格自我连接(self join),然后将结果依序列出,算出每一行之前(包括那一行本身)的总和

select A1.Name, A1.Sales, SUM(A2.Sales) Total_Sales ,count(A2.Sales) Rank from Total_Sales A1, Total_Sales A2 where A2.Sales > A1.Sales or (A2.Sales = A1.Sales and A2.Name >= A1.Name) GROUP BY A1.Name,A1.Sales ORDER BY count(A2.Sales);

  

 

 

总合百分比的计算

select A1.Name, A1.Sales, ROUND(A1.Sales/(select sum(Sales) from Total_Sales)*100,2) || '%'  Per_Sales,count(A2.Sales) Rank from Total_Sales A1, Total_Sales A2 where A2.Sales > A1.Sales or (A2.Sales = A1.Sales and A2.Name >= A1.Name) GROUP BY A1.Name,A1.Sales ORDER BY count(A2.Sales);

  

 

 

空值(NULL)和无值(“”)的区别

无值的长度为0,不占用空间;而空值null 的长度是null,是占用空间的;

IS NULL或者IS NOT NULL,是用来判断字段是不是NULL或者不是NULL,是不能查出是不是无值的;

无值的判断使用=’‘或者<>’'来处理。<>代表不等于;

在通过count()指定字段统计又多少行数时,如果遇到NULL值会自动忽略掉,遇到空值会自动加入记录中进行计算。

1、判断空值和无值的字符长度

select length(NULL),length(''),length('1');

  

2、判断并查找空值和非空值

select id,name from test10 where name is NULL;
select id,name from test10 where name is not NULL;

  

3、判断并查找无值和非无值

select id,name from test10 where name='';
select id,name from test10 where name <> '';

  

4、使用count统计行数(体现null与空值的区别)

count(*) 表示包括所有列的行数,不会忽略null值;空值正常统计

count(列名) 表示只包括这一列,统计时会忽略null值的行;空值正常统计

select id,name from test10;
select count(*) from test10;
select count(name) from test10;

  

标签:count,Name,SQL,Sales,A1,A2,MySQL,高阶,select
来源: https://www.cnblogs.com/Rui-Lin/p/15230352.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有