为了账号安全,请及时绑定邮箱和手机立即绑定

小白,请教各位大佬!面试遇到的SQL语句编写问题,求解答怎么回事哈啊?

小白,请教各位大佬!面试遇到的SQL语句编写问题,求解答怎么回事哈啊?

慕田峪4524236 2019-08-14 20:40:10
题目描述面试遇到这样一个问题:有一个用户下载文件的表'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)s
fromfile_download
groupbyuid,fid
havingc=1
ands=1;
解释一下,因为要查第一次下载文件就成功的记录,所以
下载要成功,需要有status=1的记录
下载成功之后就不会再下载,所以sum(status)groupbyuid,fid得到的结果只有0或者1,1表示成功
第一次就下载成功表示只下载了一次,所以需要count(*)groupbyuid,fid是1
不知道是否需要id,因为聚合了所以不能直接拿id,但是因为对应的数据只有一条,所以随便放一个sum(id)或者min(id)之类的都可以取到id
                            
查看完整回答
反对 回复 2019-08-14
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

SELECTcount(*)c,id,uid,fid,statusFROMfile_downloadGROUPBYuid,fidhavingc=1
                            
查看完整回答
反对 回复 2019-08-14
  • 2 回答
  • 0 关注
  • 421 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信