有趣的面试题解 (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--慢慢看,不才

原文地址:https://www.cnblogs.com/Skyda/p/9998737.html