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表上建立什么样的索引?数据库中有表User(id, name, age):
表中数据可能会是以下形式:
id name age
001 张三 56
002 李四 25
003 王五 56
004 赵六 21
005 钱七 39
006 孙八 56
..............
由于人员年龄有可能相等, 请写出SQL语句, 用于查询age最大的人员中, id最小的一个记录
mysql 查询 求sql语句
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- learning_1 2009-10-16 15:30关注
[code="SQL"]
-- 帐号为"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(
SELECT id
FROM User
WHERE age=MAX(age)
)[/code]
按照自己的想法来写的,没有经过测试。。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报