• 有趣的面试题解 (2 )


    用一条mysql查询出所有分数大于80分的学生 

     解析 : 

    1  我最开始想到的是先查出分数小于80分的学生,然后再去找,不在这个里面的学生用到 not in 

    select DISTINCT name from student where name not in (SELECT DISTINCT name from student where score < 80)

    2 后面我看到一条语句写出来,主要是用到聚合函数

    SELECT name from student GROUP BY name HAVING min(score) >=80

     查出每个学生经常借的图书类型

    分析,,1 ,,先做聚合,算出每个学生经常借的图书类型的数量,然后用数量排序 生成一个新表

       2  再用去查询所生成新表的 学生,图书类型,以及经常所借图书类型数量最大的

    SELECT xm,tslx,max(count_) from
    (SELECT xm,tslx,count(tslx) as count_ FROM card GROUP BY tslx,xm ORDER BY  count_ desc) a
    GROUP BY xm 


    3 题目如题生成相应的序列号

    解题思路:

      此题主要看的是头和尾,先把头和尾用正则拿出来,然后循环中间的数值,并作出相应的去重处理就OK

    # python 3.7
    import re
    a = '861064916000000'  #序列开始号
    b = '861064935099999'  #序列结束号
    temp = ''
    flag = False
    for i in range(len(a)):
        if not flag:
            #print('ai,bi',a[i],b[i])
            if a[i] == b[i]:
                temp += a[i]
            else:
                flag=True
    _ = b[::-1]  # 倒置
    
    c = re.findall('[9]{3,}',_) # 9的位数
    print(c)
    c = len(re.findall('[9]{3,}',_)[0]) # 9的位数
    a=a[len(temp):-c]  # 160
    b= b[len(temp):-c] # 355
    print('a.b',a,b)
    
    temp_list= []
    result_list=[]
    for i in range(int(a),int(b)+1):  # 160,355+1
        temp_list.append(i)
    temp_list=[str(x) for x in temp_list]  # 转换成文本
    print(temp_list)
    result_num=0
    def result(list_):
        global flag,result_num
        _ = []
        for i in list_:
            if i==list_[-1]: # 350
                if i[-1]==0:  # 355[-1]=0
                    _.append(i) # 350
                    flag=False
                else:
                    print(i,'i-1') #355
                    for ii in range(int(i[-1])+1):  # 5
                        _.append(i[:-1]+str(ii))   # 35+0 35+1  35+2 35+3 35+4 35+5
    
    
            elif i[0]==a[0] or i[0]==b[0]:  # 1=1 3=3   35 35 350 351
                _.append(i[:-1]) # 10个35
            else:
                _.append(i[0])
            if flag: # 如果标志位为True 就拿到标志位tr
                result_num=i[:-1]
        return _
    result_list.extend(sorted(set(result(temp_list)))) # 去重 排序
    
    try:
        result_list.remove(result_num)  # result_num = 35
    except:
        pass
    print(result_list)
    View Code--慢慢看,不才

  • 相关阅读:
    Android基础知识
    使用Android Studio和Genymotion模拟器搭建Andriod开发环境
    【原】Java开发环境搭建
    【转】JavaScript顶级对象参考模型
    【转】在.Net中关于AOP的实现
    【转】各版本IIS下ASP.net请求处理过程区别
    【转】我们应该如何去了解JavaScript引擎的工作原理
    Linux系统编程(27)——线程控制
    Linux系统编程(26)——守护进程
    Linux系统编程(25)——终端
  • 原文地址:https://www.cnblogs.com/Skyda/p/9998737.html
Copyright © 2020-2023  润新知