用一条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)