User表用于记录用户相关信息, Photo表用于记录用户的照片信息, 两个表的定义如下:
CREATE TABLE User( --用户信息表
UserId bigint, --用户唯一id
Account varchar(30) --用户唯一帐号
);
CREATE TABLE Photo( --照片信息表
PhotoId bigint, --照片唯一id
UserId bigint, --照片所属用户id
AccessCount int, --访问次数
Size bigint --照片文件实际大小
)
1) 请给出SQL打印帐号为"dragon"的用户访问次数最多的5张照片的id;
2) 给出SQL打印拥有总的照片文件大小(total_size)最多的前10名用户的id, 并根据total_size降序排列
3) 为优化上面两个查询, 需要在User和Photo表上建立什么样的索引?
2.
数据库中有表User(id, name, age):
表中数据可能会是以下形式:
id name age
001 张三 56
002 李四 25
003 王五 56
004 赵六 21
005 钱七 39
006 孙八 56
..............
CREATE TABLE User( --用户信息表
UserId bigint, --用户唯一id
Account varchar(30) --用户唯一帐号
);
CREATE TABLE Photo( --照片信息表
PhotoId bigint, --照片唯一id
UserId bigint, --照片所属用户id
AccessCount int, --访问次数
Size bigint --照片文件实际大小
)
1) 请给出SQL打印帐号为"dragon"的用户访问次数最多的5张照片的id;
2) 给出SQL打印拥有总的照片文件大小(total_size)最多的前10名用户的id, 并根据total_size降序排列
3) 为优化上面两个查询, 需要在User和Photo表上建立什么样的索引?
2.
数据库中有表User(id, name, age):
表中数据可能会是以下形式:
id name age
001 张三 56
002 李四 25
003 王五 56
004 赵六 21
005 钱七 39
006 孙八 56
..............
由于人员年龄有可能相等, 请写出SQL语句, 用于查询age最大的人员中, id最小的一个记录
-- 帐号为"dragon"的用户访问次数最多的5张照片的id
SELECT TOP 5 p.PhotoId
FROM Photo p
INNER JOIN User u ON p.Userid=u.Userid
WHERE u.Account='dragon'
ORDER BY p.AccessCount DESC
-- 拥有总的照片文件大小(total_size)最多的前10名用户的id, 并根据total_size降序排列
SELECT TOP 10 u.Userid,SUM(p.Size)
FROM Photo p
INNER JOIN User u ON p.Userid=u.Userid
GROUP BY u.Userid
ORDER BY SUM(p.Size) DESC
--User表中的UserId索引,Photo表中的Size索引
-- 查询age最大的人员中, id最小的一个记录
SELECT MIN(id) frome user where age = (select max(age) from user);