题目描述面试遇到这样一个问题:有一个用户下载文件的表'file_download',如下:iduidfidstatus1110211132114220522161317330...uid代表用户ID,fid代表文件ID,`status代表文件下载状态,0是失败,1是成功。用户若下载文件失败,可以继续下载,一旦下载成功,就不会再下载该文件。让查出用户第一次下载文件就成功的记录。自己的思路我给的答案是这样的:SELECT*FROMfile_downloadGROUPBYuid,fidHAVING`status`=1;但是面试官似乎不太满意,问我是否还有其他的方法?
2 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
随便写的…应该不是最优解,但是结果应该是对的selectsum(id)id,uid,fid,count(*)c,sum(status)sfromfile_downloadgroupbyuid,fidhavingc=1ands=1;解释一下,因为要查第一次下载文件就成功的记录,所以下载要成功,需要有status=1的记录下载成功之后就不会再下载,所以sum(status)groupbyuid,fid得到的结果只有0或者1,1表示成功第一次就下载成功表示只下载了一次,所以需要count(*)groupbyuid,fid是1不知道是否需要id,因为聚合了所以不能直接拿id,但是因为对应的数据只有一条,所以随便放一个sum(id)或者min(id)之类的都可以取到id
守着星空守着你
TA贡献1799条经验 获得超8个赞
SELECTcount(*)c,id,uid,fid,statusFROMfile_downloadGROUPBYuid,fidhavingc=1
添加回答
举报
0/150
提交
取消