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

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

/ 猿问

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

慕田峪4524236 2019-08-14 20:40:10
题目描述
面试遇到这样一个问题:有一个用户下载文件的表'file_download',如下:
id
uid
fid
status
1
1
1
0
2
1
1
1
3
2
1
1
4
2
2
0
5
2
2
1
6
1
3
1
7
3
3
0
...
uid代表用户ID,fid代表文件ID,`status代表文件下载状态,0是失败,1是成功。用户若下载文件失败,可以继续下载,一旦下载成功,就不会再下载该文件。
让查出用户第一次下载文件就成功的记录。
自己的思路
我给的答案是这样的:
SELECT*FROMfile_downloadGROUPBYuid,fidHAVING`status`=1;
但是面试官似乎不太满意,问我是否还有其他的方法?
                    
查看完整描述

2 回答

?
一只萌萌小番薯
随便写的…应该不是最优解,但是结果应该是对的
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
                            
查看完整回答
反对 回复 6天前
?
繁华开满天机
SELECTcount(*)c,id,uid,fid,statusFROMfile_downloadGROUPBYuid,fidhavingc=1
                            
查看完整回答
反对 回复 6天前

添加回答

回复

举报

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