1)select u.id,u.name,u.mobile, sum(b.cost) as ucTotal,avg(b.cost) as ucAvg,count(*) as ucCount from user u, book b where u.id = b.user_id and DATE_FORMAT(book_date,'%Y-%c') = '2008-8' group by b.user_id desc order by sum(b.cost) desc limit 0,50;
说明:sum(b.cost):求和,avg(b.cost):求平均值。
DATE_FORMAT(book_date,'%Y-%c'):格式化日期为'2008-8'这样的格式。
count(*)。。。group by b.user_id:按b.user_id分组,计算记录个数。
order by sum(b.cost) desc :按和值正序排行。
limit 0,50 :取全部记录排序后的第1到50条数据。
注意:limit 0,50是在mysql中的用法,在sqlServer和Oracle中可以这样实现:
SQL Server:
从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:
SELECT Top N * FROM TestTable where id not in (SELECT Top (M - 1) id FROM TestTable Order by id)
#FROM TestTable where id not in (SELECT Top (M + N - 1) id FROM TestTable Order by id)
( 也可得到子查询中的 max(id) ,然后主查询 where 用 id > 子.id )
例如从表Sys_option(主键为sys_id)中从10条记录开始检索20条记录,语句如下:
SELECT Top 10 * FROM Sys_option where sys_id not in ( SELECT TOP 20 sys_id FROM Sys_option order by sys_id)
Oralce数据库:
从数据库表中第M条记录开始检索N条记录
SELECT * FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2 where t2.r >= M
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
SELECT * FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2 Where t2.R >= 10