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

题目描述
面试遇到这样一个问题:有一个用户下载文件的表'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;
但是面试官似乎不太满意,问我是否还有其他的方法?
慕田峪4524236
浏览 427回答 2
2回答

一只萌萌小番薯

随便写的…应该不是最优解,但是结果应该是对的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

繁华开满天机

SELECTcount(*)c,id,uid,fid,statusFROMfile_downloadGROUPBYuid,fidhavingc=1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript