MySQL 以及 Python 实现排名窗口函数(三)

2014-11-24 15:38:05 · 作者: · 浏览: 2
connector.connect(host='192.168.1.131',port='3306',user='python_user', password='python_user',database='t_girl',autocommit=is_true)
09. return cnx
10.def db_rs_rank(c1 ='username desc' ,c2 = ' rank desc'):
11. # c1: partition column.
12. # c2: sort column.
13. time_start = time.time()
14. cnx = db_connect(True)
15. rs = cnx.cursor()
16. query0 = "select username,rank from group_concat order by " + c1 + ", " + c2
17. rs.execute(query0,multi=False)
18. if rs.with_rows:
19. rows = rs.fetchall()
20. else:
21. return "No rows affected."
22. i = 0
23. j = 0
24. k = 1
25. result = []
26. field1_compare = rows[0][0]
27. field2_compare = rows[0][1]
28. while i < len(rows):
29. if field1_compare == rows[i][0]:
30. j += 1
31. if field2_compare != rows[i][1]:
32. field2_compare =rows[i][1]
33. k = j
34. result.append((rows[i][0],rows[i][1],k))
35. else:
36. j = 1
37. k = 1
38. field1_compare = rows[i][0]
39. result.append((rows[i][0],rows[i][1],k))
40. i += 1
41. i = 0
42. rows_header = list(rs.column_names)
43. rows_header.append('rank_cnt')
44. print (rows_header[0].center(10,' ') + '|' + rows_header[1].center(10,' ') + '|' + rows_header[2].center(10,' '))
45. print ('-'.center(32,'-'))
46. while i < len(result):
47. print (result[i][0].ljust(10,' ') + '|' + str(result[i][1]).ljust(10,' ') + '|' + str(result[i][2]).ljust(10,' '))
48. i += 1
49. rs.close()
50. cnx.close()
51. time_end = time.time()
52. print ('(' + str(len(rows))+ ' Rows.)')
53. print ("Time:" + str(round((time_end-time_start),3)).rjust(10,' ') + ' Seconds.')
54.if __name__=='__main__':
55. db_rs_rank()
56.