mysql 查询 求sql语句

  1. 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
    ..............
    由于人员年龄有可能相等, 请写出SQL语句, 用于查询age最大的人员中, id最小的一个记录

[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]

按照自己的想法来写的,没有经过测试。。

1 select p.PhotoId from Photo p inner join User u on u.UserId =p.UserId where u.Account='dragon' order by p.AccessCount desc limit 1,5