面试题精选 —— 数据库统计

面试的时候总会遇到这样那样的问题,

 

数据库更是一个必不可少的问题。

 

今天给大家分享一道数据库方面的面试题!

 

题目如下:

 

已知一数据表aa,内容与格式如下:

 

 

 

写一个sql,按照格式输出下列内容:

 

 

 

……………………………………………………

 

下面我们来一起看一下这道题应该怎么去做。

 

首先,我们先想到的是统计和分组,写出来的sql如下:

 

select rqshengfucount(shengfufrom aa group by rq,shengfu;

 

但是,运行结果却差强人意。

 

 

这个时候,需要运用到另外一个sql中的知识点了。

 

这个知识点是什么呢?

 

就是行转列!

 

Mysql中,行转列有很多种方法,

 

其中一种,就是用SUM函数,结合case语句组合来完成。

 

就比如我们现在的这道面试题,

 

我们就可以这样来写。

 

select rq,sum(CASE shengfu WHEN '' THEN 1 

ELSE 0 END ) '',sum(CASE shengfu

WHEN '' THEN 1 ELSE 0 END ) ''

from aa GROUP BY rq;

 

执行结果如下:

 

 

这个sql如何解释呢?

 

首先,我们显示的胜负,是要统计出他的个数

 

我们这里选择了sum函数。

 

然后选择的case when then来组合

 

表达式的格式如下:

 

case colume
when condition
then
result
else result
end

代入我们前面的sql中,就可以这样理解:

 

当shengfu字段的值,等于“胜”,变为1,如果不等于“胜”那么给0。

 

所以,整个括号里面的内容,就是把所有的“胜”变为1,则求和SUM出来的结果,就是胜的数量统计。

 

负的计算方式一样。

 

这样就可以实现我们所要查询显示的结果了。

 

关于case,给大家说明一下,

 

  1. 简单case函数是case搜索函数的真子集 

  2.  

  • 简单case函数的使用方法与一些高级语言(如:java)中的switch语句相似:CASE给定匹配字段,WHEN给出具体的字段值,如果匹配到后返回THEN值。

  •  

  • 简单case函数其实就是case搜索函数的‘=’逻辑的实现。case搜索函数可以实现简单case函数的所有功能,而简单case函数却不可实现case搜索函数的‘=’逻辑以外的功能。

  •  

case函数匹配原则 

 

  • case函数与switch的不同在于case仅返回第一个匹配到的结果,而

  • switch则会在没有中断的情况下继续后面的判断,将会执行所有匹配的结果。

  •  

case搜索函数比简单case函数更加灵活 

 

  • case搜索函数与简单case函数相比的灵活之处在于可以在WHEN中书写判断式。

 

关于case在sql中的妙用,大家可以移步https://blog.csdn.net/wuzuodingfeng/article/details/53523176

去详细了解一下case。

转载于:https://www.cnblogs.com/AngesZhu/p/9295976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值