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


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

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

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

    题目如下:

    已知一数据表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搜索函数的真子集 

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

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

    2. case函数匹配原则 

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

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

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

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

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

    去详细了解一下case。

  • 相关阅读:
    关于泛型
    共享几个.net工具类
    关于Guid
    自动更新解决方案
    订阅者模式实例
    好久没有blog了,今日就share一个update program的经验
    杀掉相应数据库的进程
    解决IFrame下无法写Cookie问题
    sql处理死锁
    log4net配置及使用方法
  • 原文地址:https://www.cnblogs.com/AngesZhu/p/9295976.html
Copyright © 2020-2023  润新知